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