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每月下载量
26KB
499 行
repeated-assert
多次运行断言
repeated_assert
会连续运行断言,直到它们通过或者达到最大重复次数。在尝试之间,当前线程将被阻塞。
这在等待来自另一个线程(或进程)的事件时很有用。短暂等待可能会使测试失败,而长时间等待则是浪费时间的。
软件包特性
- 异步 - 启用
that_async
和with_catch_async
函数。它依赖于futures
和tokio
软件包,这就是为什么默认禁用它的原因。
示例
等待文件出现(最多重试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