#parametrized #test

nightly plague

参数化测试工具

9 个不稳定版本

使用旧 Rust 2015

0.6.3 2016年10月24日
0.6.0 2016年7月8日
0.5.3 2016年2月25日
0.5.1 2016年1月11日
0.2.0 2016年1月10日

#447测试

MIT 许可证

10KB
207

Plague 构建状态 Crates.io 许可证

Rust 的参数化测试工具

是什么

rustc 插件添加了一个宏,帮助你创建参数化测试

// Basic usage
plague! {
    for [
        (1, 1),
        (2, 2),
    ]
    test fn eq(a: i32, b: i32) {
        assert_eq!(a, b);
    }
}

// You can also specify the expected value, Plague will `assert_eq!` the result for you
plague! {
    for [1 -> 2, 2 -> 4]
    test fn double(a: i32) -> i32 {
        2*a
    }
}

// And you can call functions defined somewhere else or give meaningful names to test cases
plague! {
    for [
        'empty ("",) -> 0,
        ("foo",) -> 3,
        'c_str ("foo\u{0}bar",) -> 7,
    ]
    test str::len
}

为什么

插件将为每个参数集生成一个测试函数,这样,运行 cargo test 将显示每个失败的值,而不仅仅是其中一个

running 8 tests
test pos#4 ... ok
test pos#2 ... FAILED
test pos#3 ... FAILED
test pos#5 ... ok
test pos'empty ... ok
test pos'not_found ... ok
test pos'unary ... FAILED
test without_plague ... FAILED

failures:

---- pos#2 stdout ----
	thread 'pos#2' panicked at 'test failed: got `None`, expected `Some(0)`', examples/cmp.rs:15

---- pos#3 stdout ----
	thread 'pos#3' panicked at 'test failed: got `Some(2)`, expected `Some(0)`', examples/cmp.rs:15

---- pos'unary stdout ----
	thread 'pos'unary' panicked at 'test failed: got `None`, expected `Some(0)`', examples/cmp.rs:15

---- without_plague stdout ----
	thread 'without_plague' panicked at 'assertion failed: `(left == right)` (left: `None`, right: `Some(0)`)', examples/cmp.rs:41


failures:
    pos#2
    pos#3
    pos'unary
    without_plague

test result: FAILED. 4 passed; 4 failed; 0 ignored; 0 measured

无运行时依赖