統合テスト - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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

# 統合テスト

ユニットテストは、独立したモジュールを一つずつテストするものであり、テストは小さく、プライベートなコードについてもテストすることができます。統合テストはクレートの外側にあるもので、他の外部のコードと同様に、パブリックなインタフェースだけを使います。統合テストの目的は、ライブラリのそれぞれのモジュールが連携して正しく動作するかどうかテストすることです。

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.rs`：

    pub fn setup() {
        // 必要なファイル・ディレクトリの作成やサーバの起動といった準備を行うコードを記述します。
    }

テストを含むファイル`tests/integration_test.rs`：

    // 共通のモジュールをインポートします。
    mod common;

    #[test]
    fn test_add() {
        // 共通のコードを利用します。
        common::setup();
        assert_eq!(adder::add(3, 2), 5);
    }

モジュールを`tests/common.rs`に記述することも可能ですが、`tests/common.rs`中のテストも自動的に実行されてしまうため非推奨です。