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

标签 unit-testing rust rust-cargo

如果 #[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/

相关文章:

javascript - React Native - Jest.mock 必须是内联函数。测试使用 'withNavigation' 的组件时出现问题

rust - 如何使用 serde_json 从 JSON 数组内部流式传输元素?

java - 如何删除不存在的继承最终错误?

javascript - Angularjs promise 在单元测试中未得到解决

rust - 无法推断出关于 `_` 的足够类型信息;需要类型注释或通用参数绑定(bind)

rust - Rust 中的按位非运算符是什么?

rust - 如何正确弃用一个 crate 特性

rust - 使用命名空间而不是文件夹名称

rust - 是否可以使用夜间编译器编译一个特定的库,并将其链接到在稳定状态下编译的项目?

unit-testing - Angular 6 - 单元测试 Mat-Select