Behavior-driven-development-gherkin
行動駆動開発-ガーキン
Gherkinは、 Features、Scenarios、およびSteps を記述するために使用される言語です。 Gherkinの目的は、具体的な要件を作成することです。
具体的な要件の意味を理解するには、次の例を検討してください-
お客様が無効なクレジットカード情報を入力しないようにする必要があります。
対
顧客が正確に16桁ではないクレジットカード番号を入力した場合、フォームを送信しようとすると、正しい桁数を知らせるエラーメッセージが表示されて再表示されます。
後者にはあいまいさはなく、エラーを回避し、はるかにテスト可能です。
Gherkinは、より具体的な要件を作成するように設計されています。 ガーキンでは、上記の例は次のように見えます-
特徴
無効なクレジットカードの詳細を入力する際のフィードバック*機能の定義*
ユーザーテストでは、_Documentation_を間違える多くの人々を見てきました
背景 以下のすべてのシナリオに当てはまります
- 指定*購入するアイテムを選択しましたが、
- そして*クレジットカード番号を入力しようとしています
シナリオ-クレジットカード番号が短すぎます*シナリオの定義*
いつ 16桁未満のカード番号を入力します
- そして*その他の詳細はすべて正しい
そして*フォームを送信*ステップ
- その後*フォームを再表示する必要があります
- そして*正しい桁数を通知するメッセージが表示されるはずです
ガーキンの形式と構文
Gherkinファイルはプレーンテキストファイルであり、拡張子は.featureです。 空白でない各行は、Gherkinキーワードで始まり、その後に任意のテキストが続く必要があります。 キーワードは-
- 特徴
- シナリオ
- 与えられた、いつ、そして、そして、しかし(ステップ)
- バックグラウンド
- シナリオ概要
- 例
- "" "(ドキュメント文字列)
- | (データ表)
- @(タグ)
- #(コメント)
- *
特徴
*Feature* キーワードは、ソフトウェア機能を説明し、関連するシナリオをグループ化するために使用されます。 機能には3つの基本的な要素があります-
- キーワード–機能。
- 機能キーワードと同じ行に提供される機能の名前。
- 複数の行にまたがることができるオプションの(ただし、強く推奨される)説明。 キーワードFeatureを含む行と、シナリオ、背景、またはシナリオアウトラインで始まる行の間のすべてのテキスト。
機能には、名前と説明に加えて、シナリオまたはシナリオの概要のリスト、およびオプションの背景が含まれています。
Featureの名前を取得して小文字に変換し、スペースを下線で置き換えることにより、*。feature *ファイルに名前を付けるのが一般的です。 例えば、
feedback_when_entering_invalid_credit_card_details.feature
システム内の機能を識別するために、「機能注入テンプレート」と呼ばれるものを使用できます。
<ユーザーのタイプ>として<目標を満たす>ために<機能>が必要です
説明
Gherkinドキュメントの一部は、キーワードで始まる必要はありません。
機能、シナリオ、シナリオの概要または例に続く行には、キーワードで始まる行がない限り、好きなものを書くことができます。 これは説明を含める方法です。
シナリオ
システムの動作を表現するには、各機能に1つ以上のシナリオを添付します。 その機能に関するすべての動作を完全に指定するには、機能ごとに5〜20のシナリオを表示するのが一般的です。
シナリオは次のパターンに従います-
- 初期コンテキストを説明する
- イベントを説明する
- 期待される結果を説明する
コンテキストから始め、アクションを説明し、結果を確認します。 これはステップで行われます。 Gherkinには3つのキーワードが用意されており、各コンテキスト、アクション、および結果をステップとして説明しています。
- Given -コンテキストを確立する
- いつ-アクションを実行する
- その後-結果を確認する
これらのキーワードは、シナリオを読みやすくします。
例
シナリオ-アカウントからお金を引き出します。
- *与えられた*私は私のアカウントに100ドルを持っています。
- *いつ*私は20ドルを要求します。
- その後 20ドルを分配する必要があります。
複数の Given または When ステップが下にある場合、 And または But を使用できます。 シナリオを詳細に指定できます。
例
シナリオ-盗まれたカードを使用して引き出しを試みます。
- *与えられた*私は私のアカウントに100ドルを持っています。
- *しかし*私のカードは無効です。
- *いつ*私は50ドルを要求します。
- *その後*私のカードは返却されません。
- *そして*銀行に連絡するように言われるべきです。
シナリオを作成する際には、「各シナリオが意味を持ち、他のシナリオとは無関係に実行できる必要がある」ことを忘れないでください。 これは-
- 1つのシナリオの成功条件は、他のシナリオがその前に実行されたという事実に依存することはできません。
- 各シナリオは特定のコンテキストを作成し、1つのことを実行して、結果をテストします。
このようなシナリオには、次の利点があります-
- テストはより簡単で理解しやすくなります。
- シナリオのサブセットのみを実行でき、テストセットの破損を心配する必要はありません。
- システムによっては、テストを並行して実行できるため、すべてのテストの実行にかかる時間を短縮できます。
シナリオ概要
複数の入力または出力を使用してシナリオを作成する必要がある場合、値のみが異なる複数のシナリオを作成することになります。 解決策は、シナリオの概要を使用することです。 シナリオの概要を書くには、
- シナリオアウトラインステップの変数は、<および>でマークアップされます。
- 変数のさまざまな値は、表に例として示されています。
例
電卓に2つの数値を追加するためのフィーチャーを作成しているとします。
機能-追加。
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 |
シナリオアウトラインセクションの後には、常に1つまたは複数の例のセクションが続きます。これは、テーブルのコンテナーです。 テーブルには、シナリオの概要手順の変数に対応するヘッダー行が必要です。 以下の各行は、変数値を入力して新しいシナリオを作成します