#test #covers #verify #deprecated

废弃 uncover

一个用于验证测试是否覆盖特定代码的库

2 个版本

使用旧 Rust 2015

0.1.2 2021 年 9 月 5 日
0.1.1 2018 年 6 月 18 日
0.1.0 2018 年 6 月 12 日

#130 in #verify

Download history 72/week @ 2024-04-01 8/week @ 2024-04-22 6/week @ 2024-04-29

71 个月下载量
tom 中使用

MIT/Apache

8KB
65

uncover

Build Status Crates.io API reference

已废弃:请使用 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