Chr*_*son 3 unit-testing rust rust-cargo
如果#[test]函数意外地永远循环,则测试套件无法完成.如果你杀了它(例如ctrl- c),cargo test似乎是静默退出,所以既没有堆栈跟踪(如果启用),也没有报告哪些测试通过或失败.
有没有办法让调试失败,非终止,测试变得更容易?
我遇到过看起来像我需要的时间炸弹,但确实意味着手动包装每一个测试; 即代替:
#[test]
fn test() {
assert!(true);
}
Run Code Online (Sandbox Code Playgroud)
我需要去做:
extern crate timebomb;
use timebomb::timeout_ms;
#[test]
fn test() {
timeout_ms(|| {
assert!(true);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
对于数十项测试来说,这是一种痛苦(但不可否认的是一次性).可是等等; Rust有宏!这实际上似乎是一个合理的解决方案
extern crate timebomb;
use timebomb::timeout_ms;
macro_rules! timeout_test {
( $name:ident() $code:block ) => {
#[test]
fn $name() {
timeout_ms(|| $code, 1000);
}
}
}
// the hard way
#[test]
fn foo() {
timeout_ms(|| {
loop {}
}, 1000);
}
// the now easy way
timeout_test!(bar() {
loop {}
});
Run Code Online (Sandbox Code Playgroud)