2个不稳定版本
0.2.0 | 2020年12月1日 |
---|---|
0.1.0 | 2020年11月27日 |
#1748 in 过程宏
12KB
167 行
test-impl
test-impl
是一个Rust宏,用于在测试时测试多个特质实现,以确保它们都返回相同的结果。
如何使用它?
宏使用示例
#[test_impl(ExampleTrait(ExampleStruct, ExampleStruct2))]
#[test]
fn example_test() {
let bool_value = ExampleTrait::return_true();
assert_eq!(bool_value, true)
}
使用此处提供的参数,宏将测试 ExampleStruct 和 ExampleStruct2 与您提供的代码。翻译后的版本看起来像这样
#[test]
fn example_test() {
fn ExampleStruct() {
type ExampleTrait = ExampleStruct;
let bool_value = ExampleTrait::return_true();
assert_eq!(bool_value, true)
}
ExampleStruct();
fn ExampleStruct2() {
type ExampleTrait = ExampleStruct2;
let bool_value = ExampleTrait::return_true();
assert_eq!(bool_value, true)
}
ExampleStruct2();
}
为什么这样布局?因为它可以在保留测试回溯行数的同时,也能检测到哪个实现失败。例如,当其中一个实现返回 false
thread 'example_test' panicked at 'assertion failed: `(left == right)`
left: `false`,
right: `true`', tests/example.rs:32:5
stack backtrace:
0: rust_begin_unwind
at /rustc/18bf6b4f01a6feaf7259ba7cdae58031af1b7b39/library/std/src/panicking.rs:475
1: std::panicking::begin_panic_fmt
at /rustc/18bf6b4f01a6feaf7259ba7cdae58031af1b7b39/library/std/src/panicking.rs:429
2: example::example_test::ExampleStruct2
at ./tests/example.rs:32
3: example::example_test
at ./tests/example.rs:27
4: example::example_test::{{closure}}
at ./tests/example.rs:27
回溯指示panic发生在这段代码中 example::example_test::ExampleStruct2
,告诉我们是 ExampleStruct2
导致了问题。
依赖项
~1.5MB
~34K SLoC