跳过单元测试或至少显示它们的警告

时间:2015-03-24 19:24:50

标签: unit-testing rust

我需要测试从标准C库中获取和处理某些数据的代码。但是,此数据可能未安装在任何特定系统中。因此,在每次测试开始时,我会检测数据是否已安装并跳过测试。

将测试包装在if中很容易,但由于测试测试是否可行的代码本身可能会失败,我至少需要知道测试被跳过了。我知道我can't simply use println!并且我不想记得在每次测试时都通过--nocapture(我想在Travis日志中看到警告; Travis虚拟文件没有全部数据)。

1 个答案:

答案 0 :(得分:3)

一个鲜为人知的事实是println!使用线程本地“标准输出”,可以设置为其他输出类型。在测试期间,将其设置为捕获类型。但是,您仍然可以直接访问真正的标准输出并使用:

use std::io::{self,Write};

#[test]
fn a() {
    println!("Hi!"); // Will be captured / hidden by default
    write!(&mut io::stdout(), "Hello!").unwrap(); // Will be shown
}

输出如:

running 1 test
Hello!test a ... ok