1. 简介
在本教程中,我们将学习如何在Cucumber中有选择地运行或跳过场景。
Cucumber是一款支持行为驱动开发(BDD)的工具,它以纯文本形式读取可执行规范,并验证软件是否按照规范执行。
2. 创建场景
首先,让我们创建几个场景。
让我们以生成问候消息的API端点/greetings为例,我们可以为其编写以下场景:
Feature: Time based Greeter
# Morning
Scenario: Should greet Good Morning in the morning
Given the current time is "0700" hours
When I ask the greeter to greet
Then I should receive "Good Morning!"
# Evening
Scenario: Should greet Good Evening in the evening
Given the current time is "1900" hours
When I ask the greeter to greet
Then I should receive "Good Evening!"
# Night
Scenario: Should greet Good Night in the night
Given the current time is "2300" hours
When I ask the greeter to greet
Then I should receive "Good Night!"
# Midnight
Scenario: Should greet Good Night at midnight
Given the current time is "0000" hours
When I ask the greeter to greet
Then I should receive "Good Night!"
现在让我们实现一个根据上述规范生成响应的控制器方法:
@GetMapping("/greetings")
@ResponseBody
public String greet(@RequestParam("hours") String hours) {
String greeting;
int currentHour = Integer.parseInt(hours.substring(0, 2));
if (currentHour >= 6 && currentHour < 12) {
greeting = "Good Morning!";
} else if (currentHour >= 12 && currentHour < 16) {
greeting = "Good Afternoon!";
} else if (currentHour >= 16 && currentHour <= 19) {
greeting = "Good Evening!";
} else {
greeting = "Good Night!";
}
return greeting;
}
3. 方法
现在,我们介绍如何忽略刚刚定义的一个或多个场景。
3.1 使用自定义标签进行标记
在这种方法中,我们使用自定义注解来标注我们的场景,它可以是我们选择的任何字符串,例如@ignore、@skip或@disable。让我们使用完全随机的东西,比如@custom-ignore来确认我们选择什么都没关系。但是,有意义的东西是更好的选择。
现在,这是一个两步过程。首先,我们将使用注解标记场景,让我们使用此注解标记第三个场景:
# Night
@custom-ignore
Scenario: Should greet Good Night in the night
Given the current time is "2300" hours
When I ask the greeter to greet
Then I should receive "Good Night!"
然后,我们需要在测试resources文件夹下的junit-platform.properties中添加属性cucumber.filter.tags:
cucumber.filter.tags=not @custom-ignore
就是这样。在后续的测试运行中,此场景将被忽略。
值得注意的是,如果我们使用JUnit 4,则需要使用Cucumber TestRunner类上的@CucumberOptions注解指定相同的配置:
@CucumberOptions(tags = "not @custom-ignore")
此外,我们还可以仅运行选择性标签。
3.2 注释掉场景
值得注意的是,还有其他选择,但它们可能不像第一种方法那样惯用。
其中一种方法是注释掉该场景:
# Night
# Scenario: Should greet Good Night in the night
# Given the current time is "2300" hours
# When I ask the greeter to greet
# Then I should receive "Good Night!"
然而,这很容易出错,因为我们可能会忽略注释和取消注释多行。
4. 总结
在本文中,我们研究了如何使用自定义标签/注释可靠地忽略Cucumber中的一个或多个场景。
值得注意的是,Cucumber允许使用灵活的标签来注释和跳过场景。虽然我们也探索了其他选项,但我们了解到使用基于标签的方法是实现此目标的惯用方法。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章
