プログラムのテスト
一通り書き終わったと思ったら、提出前にまずは一度サンプルケースで答えが合うかどうかを確認してみましょう。コマンド プロンプトまたは端末を開いてプロジェクトフォルダに移動して、次のようなコマンドを実行します。
$ cargo test
Compiling abc000 v0.1.0 (C:\Users\dicen\workspace\daily\2020\0406\abc000)
Finished dev [unoptimized + debuginfo] target(s) in 0.52s
Running target\debug\deps\main-1ecbd097f851d76e.exe
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target\debug\deps\sample_inputs-05a0de7d755e5cc1.exe
running 3 tests
No
test sample3 ... ok
Yes
test sample1 ... ok
No
test sample2 ... ok
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
すると、このようにテスト結果が表示されます。このように最後に test result: ok.
となっていれば、すべてのテストに成功しているということになります。一方で、もし成功しないテストがあれば、次のようになります。
$ cargo test
Compiling abc000 v0.1.0 (C:\Users\dicen\workspace\daily\2020\0406\abc000)
Finished dev [unoptimized + debuginfo] target(s) in 0.68s
Running target\debug\deps\main-1ecbd097f851d76e.exe
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target\debug\deps\sample_inputs-05a0de7d755e5cc1.exe
running 3 tests
No
test sample2 ... ok
Yes
No
test sample1 ... FAILED
test sample3 ... ok
failures:
---- sample1 stdout ----
thread 'sample1' panicked at 'assertion failed: `(left == right)`
left: `"Yes\n"`,
right: `"No\n"`', tests\sample_inputs.rs:16:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
failures:
sample1
test result: FAILED. 2 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out
error: test failed, to rerun pass '--test sample_inputs'
最後の test result: FAILED.
により失敗したことが示されています。その横には成功と失敗の個数が示されています。そして上には失敗したときのコマンドの出力も示されています。 assertion failed
以降から、 No
と出力すべきところを Yes
と出力してしまったことがわかります。
Note: メッセージに示される
left:
とright:
はマクロassert_eq!(left, right);
に渡される引数の左右です。用意したテストコードでは実際の出力を左、期待される出力を右としてassert_eq!(output.stdout_str(), "No\n");
としていたことから、本来はNo
と出力すべきところをYes
と表示した、ということがわかります。