#generator #enumerate #filesystem #test #utest

test-generator-utest

Rust UTest 框架,涵盖 3 个阶段:设置/测试/清理

3 个版本

0.1.2 2019 年 7 月 30 日
0.1.1 2019 年 7 月 30 日
0.1.0 2019 年 7 月 30 日

#550测试

MIT/Apache

10KB

MIT License Apache 2.0 Licensed

测试生成器 UTest

该 Crates 实现了一个 Rust 的 3 阶段 utest 框架。这 3 个阶段是:

  • 设置:设置函数必须初始化上下文;如果函数崩溃/中止,则 utest 将中止 fn() -> Context
  • 测试:如果设置函数返回了有效的上下文项,则使用此上下文调用测试。 fn( & Context )
  • 清理:无论上述测试函数是否崩溃/中止,都会调用清理函数来释放上下文 fn( Context )

无论第二阶段(特性测试)中是否出现恐慌或失败的断言,都会调用清理函数。测试要么成功,要么在设置阶段、测试阶段或清理阶段回溯失败。

此 Crates 受到 Eric Opines 的帖子 的启发。

用法

请参阅可执行文件中的测试文件 'mytests.rs' 的示例 example

#[cfg(test)]
extern crate test_generator_utest;

// demonstrating usage of utest-harness
mod testsuite {
    use std::fs::File;
    use std::io::prelude::*;

    use test_generator_utest::utest;

    // Defining Utest formed by setup, test and teardown
    utest!(hello_world,
        || setup("/tmp/hello_world.txt"),
        |ctx_ref| test_write_hello_world(ctx_ref),
        |ctx|teardown(ctx));


    // Defining Utest formed by setup, test and teardown
    utest!(hello_europe,
        || setup("/tmp/hello_europe.txt"),
        test_write_hello_europe,
        teardown);

    // Defining a context structure, storing the resources
    struct Context<'t> { file: File, name: &'t str }

    // Setup - Initializing the resources
    fn setup<'t>(filename: &str) -> Context {
        // unwrap may panic
        Context { file: File::create(filename).unwrap(), name: filename }
    }

    // Teardown - Releasing the resources
    fn teardown(context: Context) {
        let Context { file, name } = context;
        // explicit dropping of file resource (would be done implcitly otherwise)
        std::mem::drop(file);
        // unwrap may panic
        std::fs::remove_file(name).unwrap();
    }

    // Test - verify feature
    fn test_write_hello_world(ctx: &Context) {
        // may panic
        let mut file = ctx.file.try_clone().unwrap();
        // may panic
        file.write_all(b"Hello, world!\n").unwrap();
        // although this assertion will cause a panic, the teardown function will be invoked 
        assert_eq!(1, 0);
    }

    // Test - verify feature
    fn test_write_hello_europe(ctx: &Context) {
        // may panic
        let mut file = ctx.file.try_clone().unwrap();
        // may panic
        file.write_all(b"Hello, Europe!\n").unwrap();
       
        assert_eq!(1,1);
    }
}

执行示例代码 cargo test -p test-generator-example testsuite 上述测试套件将打印以下输出。

running 2 tests
test testsuite::hello_europe ... ok
test testsuite::hello_world ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 3 filtered out

无运行时依赖