#集成测试 #测试

repeated-assert

多次运行断言

7个不稳定版本

0.4.0 2023年12月16日
0.3.0 2021年2月14日
0.2.0 2019年11月3日
0.1.3 2017年8月5日
0.1.0 2017年3月24日

#189 in 测试

21每月下载量

MIT许可证

26KB
499

repeated-assert

Crate version Documentation

多次运行断言

repeated_assert 会连续运行断言,直到它们通过或者达到最大重复次数。在尝试之间,当前线程将被阻塞。

这在等待来自另一个线程(或进程)的事件时很有用。短暂等待可能会使测试失败,而长时间等待则是浪费时间的。

软件包特性

  • 异步 - 启用 that_asyncwith_catch_async 函数。它依赖于 futurestokio 软件包,这就是为什么默认禁用它的原因。

示例

等待文件出现(最多重试10次,每次尝试间隔50毫秒)

repeated_assert::that(10, Duration::from_millis(50), || {
    assert!(Path::new("should_appear_soon.txt").exists());
});

等待变量 x 等于 3

repeated_assert::that(10, Duration::from_millis(50), || {
    assert_eq!(x, 3);
});

临时变量

repeated_assert::that(10, Duration::from_millis(50), || {
    let checksum = crc("should_appear_soon.txt");
    assert_eq!(checksum, 1234);
});

返回结果

repeated_assert::that(10, Duration::from_millis(50), || -> Result<_, Box<dyn std::error::Error>> {
    let checksum = crc("should_appear_soon.txt")?;
    assert_eq!(checksum, 1234);
})?;

异步

repeated_assert::that_async(10, Duration::from_millis(50), || async {
    let status = query_db().await;
    assert_eq!(status, "success");
}).await;

捕获失败的测试

还可以通过执行一些代码来“捕获”失败的测试,如果表达式无法进行断言,以触发替代策略。如果测试程序依赖于不可靠的服务,这可能会很有用。这在一定程度上与测试的概念相矛盾,因此仅在不可靠的服务对程序不是关键时使用。

在5次不成功的断言尝试后“戳”不可靠的服务

repeated_assert::with_catch(10, Duration::from_millis(50), 5,
    || {
        // poke unreliable service
    },
    || {
        assert!(Path::new("should_appear_soon.txt").exists());
    }
);

依赖项

~0–1.3MB
~22K SLoC