## 経緯
[[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)