## 経緯 [[Rust]]で標準出力に結果を出す処理をテストしたいときなどに使いたい。 ## 方法 [[Writeトレイト]]を実装した引数を渡してあげる。 以下のコードなら ```rust pub fn do(x: int) { // ... } ``` こうなる。 ```rust pub fn do<W: Write>(writer: &mut W, x: int) { // ... } ``` 呼び出し側は ```rust // Vec<u8>はWriteを実装している let mut out = Vec::new(); // std::io::stdout()など代わりに引数に渡す do(&mut out, 3); // outをUTF-8の文字列に変換してあげる let actual = String::from_utf8(out)?; // あとはassertする ``` ## 参考 - [Rust \- 標準入出力のテスト方法|teratail](https://teratail.com/questions/126598) - [rust \- Testing standard output by substituting stdout \- Stack Overflow](https://stackoverflow.com/questions/48392213/testing-standard-output-by-substituting-stdout)