2 个不稳定版本
0.2.1 | 2022 年 12 月 10 日 |
---|---|
0.2.0 |
|
0.1.0 | 2020 年 12 月 1 日 |
#810 在 测试
1,105 每月下载次数
用于 task-mon
9KB
79 行
parameterized_test::create!()
宏
这个小型 crate 提供了一个 parameterized_test::create!()
宏,用于简化创建具有不同参数的重复测试。
受 Chris Morgan 的 StackOverflow 帖子 启发,最初在 此答案 中记录,该宏通过动态生成一个新宏来实现,该新宏反过来为传递给生成宏的每个测试用例生成单独的测试。
注意:确切的 API 仍在开发中,可能会在后续(预 1.0)版本中更改。
语法
parameterized_test::create()
需要四个参数
- 测试组的名称,将用作子模块名称和生成的参数宏的名称。
- 一个或多个变量名,例如
foo
或(bar, baz)
(注意多个变量必须用括号括起来)。 - 测试体,多个语句可以包含在
{ ... }
中。
示例
此示例创建两个测试用例,分别为 tests::even::bad_case
和 tests::even::good_case
。
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ even, n, { assert_eq!(n % 2, 0); } }
even! {
bad_case: 1, // this test case will fail
good_case: 2,
}
}
测试还可以指定多个参数
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ commutative, (i, j, k), {
assert_eq!(i, j);
assert_eq!(j, k);
assert_eq!(k, i);
}}
commutative! {
small: (1, 1, 1),
large: (100, 100, 100),
}
}
同样支持 ?
操作符,类似于 独立测试
use parameterized_test::create;
#[cfg(test)]
mod tests {
use super::*;
parameterized_test::create!{ socket, path, {
let socket: SocketAddr = fs::read_to_string(path)?.parse()?;
assert_eq!(socket.is_ipv6(), true);
}}
socket! {
relative: "foo.txt",
absolute: "/tmp/bar.txt",
}
}
依赖关系
约33KB