在這個快速教學中,您將學習如何

  • 安裝 Cucumber
  • 使用 Gherkin 語法編寫您的第一個情境
  • 中編寫您的第一個步驟定義
  • 執行 Cucumber
  • 學習行為驅動開發 (BDD) 的基本工作流程

我們將使用 Cucumber 開發一個小型程式庫,該程式庫可以判斷是否是星期五。

請注意,本教學假設您具備

  • 一些使用終端機的經驗
  • 一些使用文字編輯器的經驗

在開始之前,您需要以下項目

建立一個空的 Cucumber 專案

您現在有一個安裝了 Cucumber 的小型專案。

驗證 Cucumber 安裝

為了確保所有項目都能正確地協同運作,讓我們執行 Cucumber。

您應該會看到類似以下的內容

Cucumber 的輸出告訴我們,它找不到任何要執行的項目。

編寫情境

當我們使用 Cucumber 進行行為驅動開發時,我們會使用具體的範例來指定我們希望軟體執行的內容。情境是在產生程式碼之前撰寫的。它們的起點是可執行規格。隨著產生程式碼的出現,情境扮演著即時文件自動化測試的角色。

範例對應

嘗試在您的團隊中執行 範例對應 工作坊,以一起設計範例。

在 Cucumber 中,一個範例稱為情境 (scenario)。情境定義在 .feature 檔案中,這些檔案儲存在 目錄(或其子目錄)中。

一個具體的例子是:星期天不是星期五

建立一個名為 的空檔案,內容如下

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nope"

此檔案的第一行以關鍵字 Feature: 開頭,後接名稱。最好使用與檔案名稱相似的名稱。

第二行是功能的簡短描述。 Cucumber 不會執行此行,因為它是文件。

第四行,Scenario: Sunday is not Friday 是一個情境,它是一個具體的範例,說明軟體應如何運作。

最後三行以 GivenWhenThen 開頭,是我們情境的步驟。這是 Cucumber 將會執行的部分。

請參閱回報為未定義的情境

現在我們有了一個情境,我們可以要求 Cucumber 執行它。

Cucumber 告訴我們有一個 undefined 的情境和三個 undefined 的步驟。它還建議了一些程式碼片段,我們可以利用這些程式碼片段來定義這些步驟。

複製每個未定義步驟的三個程式碼片段,並將它們貼到 中。

請參閱回報為待定的情境

再次執行 Cucumber。這次的輸出稍微不同

Cucumber 找到了我們的步驟定義並執行了它們。它們目前被標記為待定,這表示我們需要讓它們做一些有用的事情。

請參閱回報為失敗的情境

下一步是執行步驟定義中的註解所告訴我們的操作

在這裡編寫程式碼,將上述短語轉換為具體的操作

盡量在程式碼中使用與步驟中相同的詞彙。

普遍存在的語言

如果您的步驟中的詞彙源自範例映射會話期間的對話,那麼您正在建立一個普遍存在的語言,我們認為這是讓您的生產程式碼和測試更易理解且更容易維護的好方法。

將您的步驟定義程式碼變更為這樣

再次執行 Cucumber

這是一個進展!前兩個步驟通過了,但最後一個步驟失敗了。

請參閱回報為通過的情境

讓我們執行讓情境通過所需的最低限度操作。在這種情況下,這表示讓我們的傳回 Nope

再次執行 Cucumber

恭喜!您已獲得第一個綠色的 Cucumber 情境。

新增另一個失敗的測試

接下來要測試的是,當它是星期五時,我們也能獲得正確的結果。

更新 is_it_friday_yet.feature 檔案

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nope"

  Scenario: Friday is Friday
    Given today is Friday
    When I ask whether it's Friday yet
    Then I should be told "TGIF"

我們需要新增一個步驟定義,將 today 設定為「Friday」

當我們執行此測試時,它將會失敗。

那是因為我們尚未實作邏輯!接下來我們就來實作。

讓它通過

我們應該更新我們的陳述式,以實際評估 today 是否等於 "Friday"

再次執行 Cucumber

使用變數和範例

因此,我們都知道一週中的天數不只有星期天和星期五。讓我們更新情境以使用變數,並評估更多可能性。我們將使用變數和範例來評估星期五、星期天和任何其他日期!

更新 is_it_friday_yet.feature 檔案。請注意,當我們開始使用多個 Examples 時,我們如何從 Scenario 轉換為 Scenario Outline

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario Outline: Today is or is not Friday
    Given today is "<day>"
    When I ask whether it's Friday yet
    Then I should be told "<answer>"

  Examples:
    | day            | answer |
    | Friday         | TGIF   |
    | Sunday         | Nope   |
    | anything else! | Nope   |

我們需要將 today is Sundaytoday is Friday 的步驟定義,替換為一個以 <day> 的值作為字串的步驟定義。如下更新 檔案

再次執行 Cucumber

重構

現在我們有了可用的程式碼,我們應該進行一些重構

  • 我們應該將 isItFriday 從測試程式碼移到生產程式碼中。

  • 在某些時候,我們可以從步驟定義中提取輔助方法,用於我們在多個地方使用的

摘要

在本簡短的教學課程中,您已經了解如何安裝 Cucumber、如何遵循 BDD 流程來開發,以及如何使用該來評估多個情境!

您可以幫助我們改進此文件。編輯此頁面