#bdd #dont #framework #light #test-framework #language #cucumber

kitten

小猫是一个轻量级的Rust BDD框架,对于那些不喜欢cucumber的人来说——猫不喜欢黄瓜,小猫是轻巧的猫

6 个版本 (3 个破坏性更新)

0.5.0 2023年9月4日
0.4.0 2023年9月4日
0.3.0 2023年4月19日
0.2.0 2021年8月5日
0.1.3 2021年5月6日

#258 in 测试

每月 29 次下载

Apache-2.0

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