#Rust #TheBook https://doc.rust-lang.org/book/ch11-03-test-organization.html ## メモ ### ポイント - テストは[[ユニットテスト]]と[[インテグレーションテスト]]の2種類がある - [[ユニットテスト]]は`src`ディレクトリ配下でプロダクトコードと同じ場所の`tests`モジュールに書く - `#[cfg(test)]` アノテーションによって`cargo test`以外のコマンド実行時にテストコードを完全に無視できる - private functionをテストするかは開発者の自由 - [[インテグレーションテスト]]は`tests`ディレクトリ配下に書く - [[Cargo]]は`tests`ディレクトリの役割を知っているので`#[cfg(test)]`は不要 ### [[インテグレーションテスト]] #### テストの実行 `tests`ディレクトリ配下にテストファイルを作る。 `📝tests/sample_test.rs` ```rust #[test] fn one_plus_one() { assert_eq!(2, 1 + 1); } ``` `📝tests/sample_test2.rs` ```rust #[test] fn one_plus_one() { assert_eq!(2, 1 + 1); } ``` `cargo test`ですべてのテストが実行される。 #### 任意のテストを実行 任意のテストを実行したい場合は`cargo test --test <ファイル名(拡張子なし)>`とする。 ```shell # sample_test2.rsのテストは実行されない cargo test --test sample_test ``` #### テストヘルパー テスト用ヘルパーモジュールを定義する場合、`libs.rs`などを作成すると、そのファイルがテスト対象と見なされてしまう。その場合はファイル名を`mod.rs`とし、`tests/libs`のようなディレクトリ配下に作成すればよい。 ```ls  ./tests ├──  libs │ └──  mod.rs └──  sample_test.rs ``` ```rust:mod.rs pub fn add(x: i32, y: i32) -> i32 { x + y } ``` ```rust:sample_test.rs mod libs; #[test] fn one_plus_one() { assert_eq!(2, libs::add(1, 1)); } ```