Cucumber は、振る舞い駆動開発 (BDD) を支援するツールです。BDD が初めての場合は、まず当社のBDD の概要をお読みください。
Cucumber とは?
BDD が発見、協調、そして例題(テストではない)に関するものであることを理解したところで、Cucumber を見てみましょう。
Cucumber は、プレーンテキストで記述された実行可能な仕様を読み取り、ソフトウェアがその仕様どおりに動作することを検証します。仕様は複数の例、またはシナリオで構成されます。例えば
Scenario: Breaker guesses a word
Given the Maker has chosen a word
When the Breaker makes a guess
Then the Maker is asked to score
各シナリオは、Cucumber が実行するステップのリストです。Cucumber は、ソフトウェアが仕様に準拠していることを検証し、各シナリオの成功✅または失敗❌を示すレポートを生成します。
Cucumber がシナリオを理解するためには、Gherkinと呼ばれる基本的な構文規則に従う必要があります。
Gherkin とは?
Gherkin は、Cucumber が理解できるよう、プレーンテキストを十分に構造化するための文法規則のセットです。上記のシナリオは Gherkin で記述されています。
Gherkin は複数の目的を果たします。
- 曖昧さの無い実行可能な仕様
- Cucumber を使用した自動テスト
- システムの実際の動作方法を文書化する
Cucumber の文法は、多くの言語で利用できるため、チームは自分の言語でキーワードを使用できます。
Gherkin ドキュメントは、.feature
テキストファイルに保存され、通常はソフトウェアと共にソース管理でバージョン管理されます。
詳細については、Gherkin リファレンスを参照してください。
ステップ定義とは?
ステップ定義は、Gherkin ステップをプログラミングコードに接続します。ステップ定義は、ステップによって実行されるべきアクションを実行します。そのため、ステップ定義は仕様を実装にハードワイヤリングします。
┌────────────┐ ┌──────────────┐ ┌───────────┐
│ Steps │ │ Step │ │ │
│ in Gherkin ├──matched with──>│ Definitions ├───manipulates──>│ System │
│ │ │ │ │ │
└────────────┘ └──────────────┘ └───────────┘
ステップ定義は多くのプログラミング言語で記述できます。JavaScript を使用した例を以下に示します。
When("{maker} starts a game", function(maker) {
maker.startGameWithWord({ word: "whale" })
})