#TheBook https://doc.rust-lang.org/book/ch11-01-writing-tests.html ## メモ ### ポイント - testsモジュールに `use super::*;` を記入 - テスト対象の関数を利用するため - 通常は`tests`モジュールが定義されたファイルがテスト対象だから - `#[test]` annotationがついている関数がテスト - panicが期待値なら`#[should_panic]`をつける - `expected`引数を指定するとエラーメッセージの部分一致判定 - テスト関数で[[std.result.Result|Result]]を返す方法もある - [[std.result.Result.Ok|Ok]]がsuccess、[[std.result.Result.Err|Err]]がfail - [[Question mark operator]]を使う場合に便利 ```rust #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { // DO... } #[test] #[should_panic(expected = "oh")] // panicのメッセージにohが含まれていればOK fn it_panics() { panic!("ohhhhhhhhhhhhhhhhhhh"); } #[test] fn it_fails() -> Result<(), String> { // Ok(()) Err("faillllllllllllllure!!".into()) } } ``` ### マクロ | マクロ | 説明 | 使用例 | | -------------- | --------------- | ------------------------ | | [[assert!]] | trueかどうか | `assert!(boolean_var)` | | [[assert_eqマクロ]] | 2値の一致判定 | `asser_eq!(left, right)` | | [[assert_neマクロ]] | 2値の不一致判定 | `asser_ne!(left, right)` | 大抵の言語は`(expected, actual)`と呼ぶが、[[Rust]]では`(left, right)`。 ### 実装が必要なトレイト - 失敗時の詳細表示に[[Debugトレイト]] - 比較のために[[PartialEqトレイト]]