如何忽略 Cucumber 中的場景
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
就是這樣。在後續的測試運行中將會忽略此場景。
值得注意的是,如果我們使用 Junit4,則需要使用 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 允許使用靈活的標籤來註釋和跳過場景。雖然我們也探索了其他選擇,但我們了解到使用基於標籤的方法是實現此目標的慣用方法。
與往常一樣,本教學的完整原始碼可在 GitHub 上找到。