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

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相关问答推荐

字段类型为Boxed的 struct 的生存期必须超过static

通过RabbitMQ取消铁 rust 中长时间运行的人造丝任务的策略

Rust函数的返回值不能引用局部变量或临时变量

失真图像图形捕获Api

为什么HashMap::get和HashMap::entry使用不同类型的密钥?

Rust:为什么 &str 不使用 Into

在 Rust 中,在第一个空格上分割字符串一次

如何以与平台无关的方式将OsString转换为utf-8编码的字符串?

如何获取模块树?

Rust中的一生语法有什么作用?

Rust中的标记特征是什么?

为什么具有 Vec 变体的枚举没有内存开销?

如何在 nom 中构建负前瞻解析器?

通用类型,不同于输入类型,作为函数的返回值

如何用另一个变量向量置换 rust simd 向量?

Rust 生命周期:不能在方法内重新borrow 可变字段

Rust 中的运行时插件

有什么办法可以用 Rust 访问 Windows 最近的文件夹吗?

GnuCOBOL 调用 Rust:libcob:错误:找不到模块

为什么这些场景会编译并且它们会创建悬空指针?