プログラムのテスト

一通り書き終わったと思ったら、提出前にまずは一度サンプルケースで答えが合うかどうかを確認してみましょう。コマンド プロンプトまたは端末を開いてプロジェクトフォルダに移動して、次のようなコマンドを実行します。

$ 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 と表示した、ということがわかります。