gpt4 book ai didi

unit-testing - 有没有一种方法可以更轻松地调试失败的、非终止的测试?

转载 作者:行者123 更新时间:2023-11-29 07:56:41 26 4
gpt4 key购买 nike

如果 #[test] 函数不小心永远循环,则测试套件不会完成。如果你杀死它(例如 ctrl-c),cargo test 似乎会静静地退出,所以你不会得到堆栈跟踪(如果启用)或测试通过或失败的报告。

有没有一种方法可以更轻松地调试失败的、非终止的测试?

最佳答案

我遇到了 timebomb这看起来接近我需要的,但确实意味着手动包装每个测试;即代替:

#[test]
fn test() {
assert!(true);
}

我需要做的:

extern crate timebomb;
use timebomb::timeout_ms;

#[test]
fn test() {
timeout_ms(|| {
assert!(true);
}, 1000);
}

这对许多测试来说是一种痛苦(但不可否认是一次性的)。可是等等; 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 {}
});

关于unit-testing - 有没有一种方法可以更轻松地调试失败的、非终止的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39977556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com