#test-runner #testing #found #running #file #collect #test-files

file_test_runner

基于文件的测试运行器,用于运行在文件中找到的测试

11个版本 (6个重大更新)

0.7.2 2024年5月31日
0.7.1 2024年5月31日
0.6.0 2024年5月11日
0.5.1 2024年5月10日
0.1.0 2024年4月12日

#151数据结构

Download history 944/week @ 2024-04-14 502/week @ 2024-04-21 868/week @ 2024-04-28 984/week @ 2024-05-05 1110/week @ 2024-05-12 894/week @ 2024-05-19 796/week @ 2024-05-26 615/week @ 2024-06-02 481/week @ 2024-06-09 604/week @ 2024-06-16 543/week @ 2024-06-23 493/week @ 2024-06-30 893/week @ 2024-07-07 292/week @ 2024-07-14 541/week @ 2024-07-21 752/week @ 2024-07-28

2,503 每月下载量
用于 7 个crate(直接使用3个)

MIT 许可证

37KB
962 代码行

file_test_runner

通过 cargo test 运行在文件中找到的测试的基于文件的测试运行器。

这包含两个主要步骤

  1. 使用提供的策略(file_test_runner::collect_tests)从指定的目录收集所有文件。
  2. 使用自定义测试运行器(file_test_runner::run_tests)将所有文件作为测试运行。

它收集的文件可以是任何格式。如何结构化由您决定。

示例

设置

  1. 在您的 Cargo.toml 中添加一个 [[test]] 部分

    [[test]]
    name = "specs"
    path = "tests/spec_test.rs"
    harness = false
    
  2. 添加一个 tests/spec_test.rs 文件以使用主函数运行测试

    use file_test_runner::collect_and_run_tests;
    use file_test_runner::collection::CollectedTest;
    use file_test_runner::collection::CollectOptions;
    use file_test_runner::collection::strategies::TestPerFileCollectionStrategy;
    use file_test_runner::RunOptions;
    use file_test_runner::TestResult;
    
    fn main() {
      collect_and_run_tests(
        CollectOptions {
          base: "tests/specs".into(),
          strategy: Box::new(TestPerFileCollectionStrategy {
           file_pattern: None
          }),
          filter_override: None,
        },
        RunOptions {
          parallel: false,
        },
        // custom function to run the test...
        |test| {
          // * do something like this
          // * or do some checks yourself and return a value like TestResult::Passed
          // * or use `TestResult::from_maybe_panic_or_result` to combine both of the above
          TestResult::from_maybe_panic(AssertUnwindSafe(|| {
           run_test(test);
          }))
        }
      )
    }
    
    // The `test` object only contains the test name and
    // the path to the file on the file system which you can
    // then use to determine how to run your test
    fn run_test(test: &CollectedTest) {
      // Properties:
      // * `test.name` - Fully resolved name of the test.
      // * `test.path` - Path to the test file this test is associated with.
      // * `test.data` - Data associated with the test that may have been set
      //                 by the collection strategy.
    
      // helper function to get the text
      let file_text = test.read_to_string().unwrap();
    
      // now you may do whatever with the file text and
      // assert it using assert_eq! or whatever
    }
    
  3. 将一些文件添加到 tests/specs 目录或该目录的子目录中。

  4. 运行 cargo test 以运行测试。过滤应直接工作。

依赖项

~3.5–9.5MB
~90K SLoC