メモ > 技術 > プログラミング言語: 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`