6 个版本 (3 个破坏性更新)
0.5.0 | 2023年9月4日 |
---|---|
0.4.0 |
|
0.3.0 | 2023年4月19日 |
0.2.0 | 2021年8月5日 |
0.1.3 | 2021年5月6日 |
#258 in 测试
每月 29 次下载
16KB
221 行
Kitten
安装
cargo安装 kitten
Kitten 是一个非常轻量级的Rust验收测试框架。它提供了团队可能比cucumber或其他BDD框架更喜欢的功能。
- 使用默认的语言特性
- 尽可能使测试简单和干净
- 支持将函数和闭包作为给定的/当/然后的参数
展示代码
use kitten::*;
#[test]
fn calculator_can_add_numbers() {
Kitten::given(a_calculator)
.when(adding_1_and_2)
.then(the_answer_is_3);
}
}
// these functions below can be in another file along side if you wish like calculator_steps or kept in the same file
fn a_calculator() -> Calculator {
Calculator {}
}
fn adding_1_and_2(calculator: Calculator) -> i32 {
calculator.add(1, 2)
}
fn the_answer_is_3(the_answer: i32) -> () {
assert_eq!(3, the_answer);
}
在上述代码流中,.given/.when/.then/
的行为像一个链,其中每个步骤都接受一个函数,该函数将结果传递给下一个步骤的输入。
您也可以使用闭包来这样做...
Kitten::given(|| Calculator {})
.when(|calculator| calculator.add(1, 2))
.then(|answer| assert_eq!(3, answer.clone()));
步骤函数具有通用返回类型,因此您可以自由地调整通过链传递的内容,如下所示
Kitten::given(|| "hello world") // we return a &str
.when(|hello_world| Some(hello_world)) // we return a Option<&str>
.then(|some_hello_word| {
assert_eq!(some_hello_world.is_none(), false); // we assert on our Option<&str>
});
这个特性在您需要在不同步骤之间传递结果时也非常有用
Kitten::given(|| School{})
.and(|school| (school, Pupil{}))
.when(|(school, pupil)| {
school.enrol(pupil)
})
.then(|(school, pupil)| {
assert_eq(school.pupils.contains(pupil), true);
assert_eq(pupil.is_enrolled_to_a_school(), true);
});
这是如何实现的?
这是全部的Rust,它不由gherkin驱动!它更简单。
使用Kitten,Given When Then就是您所需的一切
一个常见的场景是,当您有一个包含Given When Then的用例文件时,您会发现事情的表达方式略有不当,要么太多或太少细节,不足以进行自动化,因此您决定进行修改。但修改意味着在每一个用例块中都要进行修改,然后您想稍微修改一些其他内容,又会遇到同样的问题。这会使事情变得混乱。
产品负责人只想描述该功能,他们不希望了解所有测试用例和场景的细节,只希望确认该功能已涵盖。
依赖关系
~3-9.5MB
~87K SLoC