1 个不稳定版本
0.1.0 | 2020年7月7日 |
---|
#737 in 测试
10KB
72 行
Sif
Sif 提供了一个过程宏,允许您使用多个参数定义要运行的测试。测试用例使用 'parameterized' 属性而不是 'test' 属性定义。此包受到了 JUnit @ParameterizedTest
注解的启发,并建立在 parameterized 包的开发经验之上。
示例
除了下面的两个示例之外,您还可以在此存储库中的 sif_demo 包以及 tests 文件夹中找到更多示例。
示例:NPC
#[cfg(test)] #[macro_use] extern crate sif;
enum NPC {
Andre,
Lautrec,
Siegmeyer,
Solaire,
}
trait Home {
fn reigns_from(&self) -> &str;
}
impl Home for NPC {
fn reigns_from(&self) -> &str {
match self {
NPC::Solaire | NPC::Andre => "Astora",
NPC::Lautrec => "Carim",
NPC::Siegmeyer => "Catarina",
}
}
}
#[parameterized]
#[case(NPC::Andre, "Astora")]
#[case(NPC::Lautrec, "Carim")]
#[case(NPC::Siegmeyer, "Catarina")]
#[case(NPC::Solaire, "Astrora")]
fn npc_reigns_from_test(npc: NPC, place: &str) {
assert_eq!(npc.reigns_from(), place)
}
导入 Sif
Rust 2018 中,导入属性宏主要有两种方式。
第一种是将宏导入局部作用域,就像常规导入一样,例如:use sif::parameterized;
。此方法还可以轻松地将宏的属性别名到其他标识符,例如 use sif::parameterized as pm;
。
第二种是使用 extern crate
结合 macro_use
属性(例如:#[cfg(test)] #[macro_use] extern crate sif;
)。如果您在包中大量使用宏,第二个选项具有优势,因为您只需在包的根目录中导入一次。
使用 IDE 运行测试
IntelliJ IDEA (+ intellij-rust)
IntelliJ IDEA 识别测试用例并提供上下文菜单,允许您在特定范围内(例如模块或单个测试用例)运行测试,例如通过点击位于代码块开始处旁边的栏中的▶图标,该代码块包含以下代码:#[test]
。不幸的是,由于当前属性宏尚未展开,IDE 将无法识别由 sif::parameterized
宏生成的测试用例。由于我发现这种方式运行测试非常有用,我选择实现一个简单的解决方案,通过提供一个小的声明性宏,该宏展开为一个空测试用例。我还尝试了各种其他解决方案,这些方案将在 #ISSUENR 中进行记录。
#[cfg(test)] #[macro_use] extern crate sif;
fn squared(input: i8) -> i8 {
input * input
}
#[cfg(test)]
/*▶*/mod tests {
use super::*;
/*▶*/mod squared_tests { // <--
use super::*;
// this macro generates an empty test case which will mark the module as containing tests.
ide!(); // <--
#[pm(input = {
-2, -1, 0, 1, 2
}, expected = {
4, 1, 0, 1, 4
})]
fn test_squared(input: i8, output: i8) {
assert_eq(squared(input), output);
}
}
}
许可证
根据您的选择,此软件受Apache 许可证,版本 2.0 或 MIT 许可证许可。
除非您明确声明,否则您有意提交以包含在此软件包中的任何贡献,根据 Apache-2.0 许可证的界定,应按上述方式双重许可,不得附加任何额外条款或条件。
依赖项
约1.5MB
约36K SLoC