次のメソッドとユニット テストを実装しました。
use std::fs::File;
use std::path::Path;
use std::io::prelude::*;
fn read_file(path: &Path) {
let mut file = File::open(path).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
println!("{contents}");
}
#[test]
fn test_read_file() {
let path = &Path::new("/etc/hosts");
println!("{path:?}");
read_file(path);
}
ユニットテストは次のように実行します。
rustc --test app.rs; ./app
これを実行することもできます
cargo test
テストに合格したというメッセージが返されますが、println!
画面には表示されません。なぜでしょうか?
ベストアンサー1
これは、Rust テスト プログラムがテスト出力を整理するために成功したテストの stdout を非表示にするために発生します。この--nocapture
オプションをテスト バイナリまたはcargo test
(ただし、この場合は後 --
– 以下を参照)に渡すことで、この動作を無効にすることができます。
#[test]
fn test() {
println!("Hidden output")
}
テストの呼び出し:
% rustc --test main.rs; ./main
running 1 test
test test ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
% ./main --nocapture
running 1 test
Hidden output
test test ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
% cargo test -- --nocapture
running 1 test
Hidden output
test test ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
ただし、テストが失敗した場合は、このオプションが存在するかどうかに関係なく、標準出力が印刷されます。