Memo

メモ > 技術 > プログラミング言語: Rust > テスト

テスト
Rustは標準で自動テスト機能をサポートしているので、別途ライブラリやツールをインストールする必要は無い 以下のコマンドで単体テストを作成できる >cargo new --lib testings 以下のとおり、testings\src\lib.rs にテストが作成される
pub fn add(left: usize, right: usize) -> usize { left + right } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { let result = add(2, 2); assert_eq!(result, 4); } }
以下のコマンドでテストを実行できる テスト実行時はmain関数が実行されず、アノテーション「#[test]」を付けた部分が実行されるようになる …と思ったが、そもそもテストは何も実行されていない?(失敗するテストにしても「ok」となってしまう) >cargo test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.02s Running unittests src/main.rs (target\debug\deps\hello-19e713fe88107cdf.exe) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s src\main.rs の最後に testings\src\lib.rs の内容を張り付けると、以下のとおりテストを実行できた (成功するテストだと「ok」と表示され、失敗するテストにすると、「error」と表示される) ※テストはテスト専用ファイルではなく、プログラムと同じファイルに「#[test]」として書くため、このような挙動になっているのかもしれない ただしこれは単体テストの場合で、結合テストの場合は tests フォルダ内にテストを置くといいらしい >cargo test Compiling hello v0.1.0 (C:\Users\refirio\Rust\hello) Finished `test` profile [unoptimized + debuginfo] target(s) in 0.26s Running unittests src/main.rs (target\debug\deps\hello-19e713fe88107cdf.exe) running 1 test test tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s >cargo test Compiling hello v0.1.0 (C:\Users\refirio\Rust\hello) Finished `test` profile [unoptimized + debuginfo] target(s) in 0.23s Running unittests src/main.rs (target\debug\deps\hello-19e713fe88107cdf.exe) running 1 test test tests::it_works ... FAILED failures: ---- tests::it_works stdout ---- thread 'tests::it_works' panicked at src/main.rs:17:9: assertion `left == right` failed left: 4 right: 3 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: tests::it_works test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass `--bin hello`

Advertisement