Rustのテストでprint出力をさせてみる

はじめに

  • Rustでテストを行う際、println!等の出力を表示させる方法を知りたくて調べたので、自分への備忘録も兼ねて記事にしました。

結論

結論から言うとテストの際、以下のようにcargo testの後に引数を追加することで表示できます。 cargo test -- --nocapture

以下の、ごくシンプルなコードに対してテストを行ってみたいと思います。

fn add_two(n: i32) -> i32 {
    println!("execute {} + 2", n);
    n + 2
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add_two() {
        assert_eq!(5, add_two(3));
    }
}

まずはcargo testでテストを実行した場合、以下のようなテキストが出力されます。

running 1 test
test tests::test_add_two ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

次にcargo test -- --nocaptureの場合、以下のようなテキストが出力されます。

running 1 test
execute 3 + 2
test tests::test_add_two ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

2つの出力を比較すると、execute 3 + 2 の部分(=コードの中のprintln!の内容)が追加されているのが分かります。

さいごに

  • Rustのテストでprint出力をしたい時の方法を見ていきました
  • テスト時、cargo test -- --nocaptureとすることでprint内容が結果に出力されるようになります