37个版本
0.21.1 | 2024年6月16日 |
---|---|
0.20.2 | 2023年12月4日 |
0.20.1 | 2023年10月16日 |
0.20.0 | 2023年7月10日 |
0.1.0 | 2016年3月29日 |
#13 in 异步
92,657 每月下载量
用于 27 个crate(其中23个直接使用)
530KB
10K SLoC
Rust的Cucumber测试框架
Cucumber测试框架的Rust实现。完全原生,无需外部测试运行器或依赖。
使用方法
在 .feature
文件中描述测试场景
Feature: Eating too much cucumbers may not be good for you
Scenario: Eating a few isn't a problem
Given Alice is hungry
When she eats 3 cucumbers
Then she is full
实现 World
特性和描述步骤
use std::time::Duration;
use cucumber::{given, then, when, World as _};
use tokio::time::sleep;
#[derive(cucumber::World, Debug, Default)]
struct World {
user: Option<String>,
capacity: usize,
}
#[given(expr = "{word} is hungry")] // Cucumber Expression
async fn someone_is_hungry(w: &mut World, user: String) {
sleep(Duration::from_secs(2)).await;
w.user = Some(user);
}
#[when(regex = r"^(?:he|she|they) eats? (\d+) cucumbers?$")]
async fn eat_cucumbers(w: &mut World, count: usize) {
sleep(Duration::from_secs(2)).await;
w.capacity += count;
assert!(w.capacity < 4, "{} exploded!", w.user.as_ref().unwrap());
}
#[then("she is full")]
async fn is_full(w: &mut World) {
sleep(Duration::from_secs(2)).await;
assert_eq!(w.capacity, 3, "{} isn't full!", w.user.as_ref().unwrap());
}
#[tokio::main]
async fn main() {
World::run("tests/features/readme").await;
}
在 Cargo.toml
中添加测试
[[test]]
name = "readme"
harness = false # allows Cucumber to print output instead of libtest
Cargo功能
macros
(默认):启用步骤属性和自动连接。timestamps
:启用收集所有 Cucumber 事件的时间戳。output-json
(隐含timestamps
):启用以 Cucumber JSON格式 输出的支持。output-junit
(隐含timestamps
):启用以 JUnit XML报告 输出的支持。libtest
(表示timestamps
):启用与Rustlibtest
的JSON输出格式的兼容性。对于IntelliJ Rust插件集成很有用。tracing
:启用与tracing
包的集成。
支持的包
由gherkin
包实现了Cucumber的完整Gherkin语言。大部分Gherkin语言的特性已经被解析,并通过相关结构体提供访问。
已知问题
- 解析器中将
Scenario Outline
视为与Outline
或Example
相同(gherkin/#19)。
许可协议
本项目许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
依赖项
~9–21MB
~299K SLoC