[解決済み] Rustのユニットテストでprintln! が動作しないのはなぜ?
2022-03-23 21:27:43
質問
以下のメソッドとユニットテストを実装しました。
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!
が画面に表示されない。なぜでしょうか?
解決方法は?
これは、Rust のテストプログラムが、テスト出力を整頓するために、成功したテストの標準出力を隠してしまうために起こります。この挙動を無効にするには
--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
ただし、テストが失敗した場合は、このオプションがあるかどうかにかかわらず、その標準出力が表示されます。
関連
-
[解決済み] rustupでインストールしたRustをアンインストールするには?
-
[解決済み] Rustにはキューとスタックコレクションがありますか?
-
[解決済み] 文字列を追加して印刷するにはどうすればよいですか?
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?
-
[解決済み】なぜRustでは明示的なライフタイムが必要なのですか?
-
[解決済み] このクエスチョンマークの演算子は何についてですか?
-
[解決済み] ローカルの未公開クレートを使うには?
-
[解決済み] Rust構造体の変数を初期化する、より速い/より短い方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 構造体や配列を印刷するには?
-
[解決済み】ある値とその値への参照を同じ構造体に格納できないのはなぜですか?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?
-
[解決済み] このクエスチョンマークの演算子は何についてですか?
-
[解決済み] Iterator(またはその他の trait)を返す正しい方法は何ですか?
-
[解決済み] Rust の 128 ビット整数 `i128` は 64 ビットシステムでどのように動作するのでしょうか?
-
[解決済み] カスタムステップで範囲を反復処理するには?