2 个版本
使用旧 Rust 2015
0.1.2 | 2021 年 9 月 5 日 |
---|---|
0.1.1 | 2018 年 6 月 18 日 |
0.1.0 |
|
#130 in #verify
71 个月下载量
在 tom 中使用
8KB
65 行
uncover
已废弃:请使用 https://github.com/matklad/cov-mark 代替。
一个通过使用仪表来回答以下两个问题的库,使测试更容易维护
- 哪个代码被这个测试执行了?
- 哪个测试覆盖了这个代码片段?
有关更多信息,请参阅文档。
lib.rs
:
uncover
已废弃:请使用 https://github.com/matklad/cov-mark 代替。
一个通过使用仪表来回答以下两个问题的库,使测试更容易维护
- 哪个代码被这个测试执行了?
- 哪个测试覆盖了这个代码片段?
以下是一个简短的示例
#[macro_use]
extern crate uncover;
// This defines two macros, `covers!` and `covered_by!`.
// They will be no-ops unless `cfg!(debug_assertions)` is true.
define_uncover_macros!(
enable_if(cfg!(debug_assertions))
);
fn parse_date(s: &str) -> Option<(u32, u32, u32)> {
if 10 != s.len() {
// By using `covered_by!("unique_name")`
// we signal which test exercises this code.
covered_by!("short date");
return None;
}
if "-" != &s[4..5] || "-" != &s[7..8] {
covered_by!("wrong dashes");
return None;
}
// ...
}
#[test]
fn test_parse_date() {
{
// `covers!("unique_name")` creates a guard object
// that verifies that by the end of the scope we've
// executed the corresponding `covered_by!("unique_name")`.
covers!("short date");
assert!(parse_date("92").is_none());
}
// This will fail. Although the test looks like
// it exercises the second condition, it does not.
// The call to `covers!` call catches this bug in the test.
// {
// covers!("wrong dashes");
// assert!(parse_date("27.2.2013").is_none());
// }
{
covers!("wrong dashes");
assert!(parse_date("27.02.2013").is_none());
}
}
并发注意事项
覆盖率通过共享可变状态跟踪,因此以下注意事项适用
- 一个测试中的
covers!
可能会被另一个测试的线程覆盖。因此,一个测试可能会在应该失败时通过。
相反方向的错误永远不会发生:如果你的代码用一个线程覆盖了所有内容,它也会用多个线程来覆盖。
依赖项
~10KB