
- 行為驅動開發
- BDD - 首頁
- BDD - 簡介
- BDD - 測試驅動開發
- BDD - 以BDD的方式進行TDD
- BDD - 基於示例的規範
- BDD - 工具
- BDD - Cucumber
- BDD - Gherkin
- BDD - SpecFlow
- BDD 有用資源
- BDD - 快速指南
- BDD - 有用資源
- BDD - 討論
行為驅動開發 - Gherkin
Gherkin 是一種語言,用於編寫特性、場景和步驟。Gherkin 的目的是幫助我們編寫具體的需求。
要理解我們所說的具體需求是什麼意思,請考慮以下示例 -
應阻止客戶輸入無效的信用卡資訊。
如果客戶輸入的信用卡號碼長度不正好為 16 位,當他們嘗試提交表單時,表單應重新顯示並顯示一條錯誤訊息,告知他們正確的位數。
後者沒有歧義,避免了錯誤,並且更易於測試。
Gherkin 旨在建立更具體的需求。在 Gherkin 中,上面的示例如下所示 -
特性
輸入無效信用卡資訊時的反饋 特性定義
在使用者測試中,我們看到許多人犯了錯誤 文件
背景適用於以下所有場景
假設我選擇了一件要購買的商品,
並且我即將輸入我的信用卡號碼
場景 - 信用卡號碼太短場景定義
當我輸入一個少於 16 位的卡號
並且所有其他詳細資訊都正確
並且我提交表單步驟
那麼表單應重新顯示
並且我應該看到一條訊息,告知我正確的位數
Gherkin 格式和語法
Gherkin 檔案是純文字檔案,副檔名為 .feature。每個非空行必須以 Gherkin 關鍵字開頭,後跟任意文字。關鍵字如下 -
特性
場景
假設、當、那麼、並且、但是(步驟)
背景
場景大綱
示例
"""(文件字串)
|(資料表)
@(標籤)
#(註釋)
*
特性
特性關鍵字用於描述軟體特性,以及對相關場景進行分組。特性具有三個基本要素 -
關鍵字 – 特性。
特性的名稱,在與特性關鍵字相同的行上提供。
可選的(但強烈推薦)描述,可以跨越多行,即包含特性關鍵字的行與以場景、背景或場景大綱開頭的行之間的所有文字。
除了名稱和描述之外,特性還包含場景或場景大綱列表,以及可選的背景。
通常,透過獲取特性的名稱,將其轉換為小寫並將空格替換為下劃線來命名.feature檔案。例如,
feedback_when_entering_invalid_credit_card_details.feature
為了識別系統中的特性,您可以使用所謂的“特性注入模板”。
描述
Gherkin 文件的某些部分不必以關鍵字開頭。
在特性、場景、場景大綱或示例後面的行中,您可以編寫任何內容,只要沒有行以關鍵字開頭即可。這是包含描述的方式。
場景
要表達系統的行為,您需要將一個或多個場景附加到每個特性上。通常每個特性有 5 到 20 個場景來完整地指定該特性的所有行為。
場景遵循以下模式 -
描述初始上下文
描述事件
描述預期結果
我們從上下文開始,描述一個動作,並檢查結果。這是透過步驟完成的。Gherkin 提供三個關鍵字來描述每個上下文、動作和結果作為步驟。
假設 - 建立上下文
當 - 執行操作
那麼 - 檢查結果
這些關鍵字提高了場景的可讀性。
示例
場景 - 從賬戶中取款。
假設我的賬戶中有 100 美元。
當我請求 20 美元。
那麼應發出 20 美元。
如果在彼此下方的多個假設或當步驟,可以使用並且或但是。它們允許您詳細指定場景。
示例
場景 - 使用被盜卡嘗試取款。
假設我的賬戶中有 100 美元。
但是我的卡無效。
當我請求 50 美元。
那麼我的卡不應該退回。
並且我應該被告知聯絡銀行。
在建立場景時,請記住“每個場景都必須有意義並且能夠獨立於任何其他場景執行”。這意味著 -
您不能使一個場景的成功條件依賴於之前執行的其他某些場景。
每個場景都建立其特定的上下文,執行一項操作,並測試結果。
此類場景提供以下好處 -
測試將更簡單且更容易理解。
您可以只執行測試集的一部分,而不必擔心測試集的破壞。
根據您的系統,您可能能夠並行執行測試,從而減少執行所有測試所需的時間。
場景大綱
如果您必須編寫具有多個輸入或輸出的場景,您最終可能會建立幾個僅值不同的場景。解決方案是使用場景大綱。要編寫場景大綱,
場景大綱步驟中的變數用<和>標記。
變數的各種值作為表中的示例給出。
示例
假設您正在為計算器上的兩個數字相加編寫一個特性。
特性 - 加法。
Scenario Outline: Add two numbers. Given the input "<input>" When the calculator is run Then the output should be <output>" Examples | input | output | | 2+2 | 4 | | 98+1 | 99 | | 255+390 | 645 |
場景大綱部分之後始終是一個或多個示例部分,它們是表的容器。表必須具有一個標題行,對應於場景大綱步驟中的變數。下面的每一行都將建立一個新場景,填充變數值