我想使用一个实现std::io::Write的 struct 来输出内容. 我使用std::io::stdout()进行测试,但即使缓冲区写入成功,我也看不到输出内容.

#[test]
fn show_test_2() {
    use std::io::Write;
    let mut buffer = std::io::stdout();
    match buffer.write(&"-----------------------".as_bytes()) {
        Ok(_) => println!("Buffer write success"),
        Err(_) => println!("Buffer write failed"),
    };
    println!("+++++++++++++++++++++++");
    assert!(false);
}

cargo test --lib米,输出是:

test tests::show_test_2 ... FAILED

failures:

---- tests::show_test_2 stdout ----
Buffer write success
+++++++++++++++++++++++
thread 'tests::show_test_2' panicked at 'assertion failed: false', src\lib.rs:621:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

我的问题是:

  1. 为什么"-"不在测试中::show_test_2标准输出?
  2. 做这件事的正确方式是什么?

推荐答案

这似乎是一个已知的问题:

问题是,测试似乎重定向了print/println,但not实际上是std::io::stdout()函数.这个仍然直接打印到控制台,而不会被测试捕获.

不过,解决方案非常简单.使用print!()/println!()而不是std::io::stdout().write().

Rust相关问答推荐

移植带有可变borrow 的C代码-卸载期间错误(nappgui示例)

在‘await’点上使用‘std::同步::Mutex’是否总是会导致僵局?

我怎样才能从一个Rust 的日期中go 掉3年?

如何处理动态 struct 实例化?

展开枚举变量并返回所属值或引用

在Rust中赋值变量有运行时开销吗?

重写Rust中的方法以使用`&;mut self`而不是`mut self`

我可以在不收集或克隆的情况下,将一个带有Item=(key,val)的迭代器拆分成单独的key iter和val iter吗?

`Pin`有没有不涉及不安全代码的目的?

考虑到Rust不允许多个可变引用,类似PyTorch的自动区分如何在Rust中工作?

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

在 Rust 中查找向量中 dyn struct 的索引

更新 rust ndarray 中矩阵的一行

方法可以被误认为是标准特性方法

Rust中的位移操作对范围有什么影响?

一旦令牌作为文字使用,声明宏不匹配硬编码值?

在异步 Rust 中,Future 如何确保它只调用最近的 Waker?

判断对象是 PyDatetime 还是 Pydate 的实例?

预期类型参数,发现不透明类型

有没有办法使用 NASM 语法进行内联汇编?