統合テスト
単体テストは、1 つのモジュールを一度に単独でテストします。単体テストは小さく、 プライベートなコードもテストできます。統合テストはクレートの外部にあり、他のコードと同じように 公開インターフェイスだけを使用します。その目的は、ライブラリの多くの部分が連携して正しく動作することを テストすることです。
Cargo は、src の隣にある tests ディレクトリ内で統合テストを探します。
ファイル src/lib.rs:
// これを `adder` という名前のクレートで定義する。
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
テストを含むファイル: tests/integration_test.rs:
#[test]
fn test_add() {
assert_eq!(adder::add(3, 2), 5);
}
cargo test コマンドでテストを実行する:
$ cargo test
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/integration_test-bcd60824f5fbfe19
running 1 test
test test_add ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests adder
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
tests ディレクトリ内の各 Rust ソースファイルは、個別のクレートとしてコンパイルされます。 統合テスト間でコードを共有するために、公開関数を持つモジュールを作成し、 それをテスト内でインポートして使用できます。
ファイル tests/common/mod.rs:
pub fn setup() {
// 必要なファイル/ディレクトリの作成や、サーバーの起動などの
// セットアップコード。
}
テストを含むファイル: tests/integration_test.rs
// common モジュールをインポートする。
mod common;
#[test]
fn test_add() {
// common のコードを使用する。
common::setup();
assert_eq!(adder::add(3, 2), 5);
}
モジュールを tests/common.rs として作成しても動作しますが、おすすめしません。 なぜなら、テストランナーがそのファイルをテストクレートとして扱い、その中のテストを実行しようとするためです。