我需要测试从标准C库中获取和处理某些数据的代码。但是,此数据可能未安装在任何特定系统中。因此,在每次测试开始时,我会检测数据是否已安装并跳过测试。
将测试包装在if中很容易,但由于测试测试是否可行的代码本身可能会失败,我至少需要知道测试被跳过了。我知道我can't simply use println!
并且我不想记得在每次测试时都通过--nocapture
(我想在Travis日志中看到警告; Travis虚拟文件没有全部数据)。
答案 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