我已经实现了以下方法和单元测试:

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来禁用此行为(但是,在本例中为after --–请参见下文):

#[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

但是,如果测试失败,无论是否存在此选项,都将打印其标准输出.

Rust相关问答推荐

为什么函数不接受选项T参数的所有权?

什么是谓词的简短和简洁类型

Rust kill std::processs::child

包含嵌套 struct 的CSV

如何使用 list 在Rust for Windows中编译?

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

如何导入crate-type=[";cdylib;]库?

将PathBuf转换为字符串

如何向下转换到MyStruct并访问Arc Mutex MyStruct实现的方法?

如何将单个 struct 实例与插入器一起传递到Rust中的映射

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

什么是`&;[][..]`铁 rust 里的刻薄?

borrow 是由于对 `std::sync::Mutex>` 的解引用强制而发生的

Some(v) 和 Some(&v) 有什么区别?

RAII 模式的 Rust 解决方案,用于在 new() 和 drop() 上修改另一个对象

使用 serde_json 进一步处理字段

使用 `.` 将 T 转换为 &mut T?

BigUint 二进制补码

基于名称是否存在的条件编译

为什么 `ref` 会导致此示例*取消引用*一个字段?