Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

統合テスト

単体テストは、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 として作成しても動作しますが、おすすめしません。 なぜなら、テストランナーがそのファイルをテストクレートとして扱い、その中のテストを実行しようとするためです。