ローカライゼーション
Gherkinは多くの使用言語にローカライズされています。それぞれに、これらのキーワードのローカライズされた同等のものがあります。
Gherkinは、実行可能な仕様に構造と意味を与える特別なキーワードのセットを使用します。各キーワードは多くの言語に翻訳されています。このリファレンスでは、英語を使用します。
Gherkinドキュメントのほとんどの行は、いずれかのキーワードで始まります。
コメントは、フィーチャファイル内の任意の場所にある新しい行の先頭にのみ許可されます。コメントは、ゼロ個以上のスペース、それに続くハッシュ記号(#
)、そしてテキストで始まります。
ブロックコメントは、現在Gherkinではサポートされていません。
インデントには、スペースまたはタブを使用できます。推奨されるインデントレベルは2スペースです。例を示します。
Feature: Guess the word
# The first example has two steps
Scenario: Maker starts a game
When the Maker starts a game
Then the Maker waits for a Breaker to join
# The second example has three steps
Scenario: Breaker joins a game
Given the Maker has started a game with the word "silky"
When the Breaker joins the Maker's game
Then the Breaker must guess a word with 5 characters
各ステップの末尾の部分(キーワードの後)は、ステップ定義と呼ばれるコードブロックにマッチングされます。
一部のキーワードはコロン(:
)が続き、一部のキーワードは続きません。コロンが続くべきではないキーワードの後にコロンを追加すると、テストは無視されます。
空行ではない各行は、Gherkinのキーワードで始まり、その後に任意のテキストを続ける必要があります。例外は、Example
/Scenario
、Background
、Scenario Outline
、Rule
行の下に配置された自由形式の説明です。
主なキーワードは次のとおりです。
Feature
Rule
(Gherkin 6以降)Example
(またはScenario
)Given
、When
、Then
、And
、But
(ステップ用)(または*
)Background
Scenario Outline
(またはScenario Template
)Examples
(またはScenarios
)いくつかの二次的なキーワードもあります。
"""
(Doc Strings)|
(データテーブル)@
(タグ)#
(コメント)Feature
キーワードの目的は、ソフトウェアフィーチャの高レベルな説明を提供し、関連するシナリオをグループ化することです。
Gherkinドキュメントの最初の主要キーワードは常にFeature
でなければならず、その後に:
とフィーチャを説明する短いテキストが続きます。
Feature
の下に自由形式のテキストを追加して、詳細な説明を追加できます。
これらの説明行は、Cucumberの実行時には無視されますが、レポートに使用できます(公式のHTMLフォーマッタなどのレポートツールによって含まれます)。
Feature: Guess the word
The word guess game is a turn-based game for two players.
The Maker makes a word for the Breaker to guess. The game
is over when the Breaker guesses the Maker's word.
Example: Maker starts a game
名前とオプションの説明は、Cucumberにとって特別な意味を持ちません。それらの目的は、簡単な説明やビジネスルール(一般的な受け入れ基準)のリストなど、フィーチャの重要な側面を文書化するための場所を提供することです。
Feature
の自由形式の説明は、Background
、Rule
、Example
、またはScenario Outline
(またはそれらのエイリアスキーワード)で始まる行が始まると終了します。
ファイルとディレクトリ構造とは別に、関連するフィーチャをグループ化するために、Feature
の上にタグを配置できます。
.feature
ファイルには、1つのFeature
しか持つことができません。
(Feature
について上記で説明したように)自由形式の説明は、Example
/Scenario
、Background
、Scenario Outline
、Rule
の下にも配置できます。
行がキーワードで始まらない限り、好きなものを記述できます。
説明はMarkdown形式にすることができます。公式のHTMLフォーマッタを含むフォーマッタはこれをサポートしています。
(オプションの)Rule
キーワードは、Gherkin v6以降の一部です。
Rule
キーワードの目的は、実装されるべき1つのビジネスルールを表すことです。フィーチャに追加情報を提供します。Rule
は、このビジネスルールに属するいくつかのシナリオをグループ化するために使用されます。Rule
には、特定のルールを示す1つ以上のシナリオを含める必要があります。
例:
# -- FILE: features/gherkin.rule_example.feature
Feature: Highlander
Rule: There can be only One
Example: Only One -- More than one alive
Given there are 3 ninjas
And there are more than one ninja alive
When 2 ninjas meet, they will fight
Then one ninja dies (but not me)
And there is one ninja less alive
Example: Only One -- One alive
Given there is only 1 ninja alive
Then he (or she) will live forever ;-)
Rule: There can be Two (in some cases)
Example: Two -- Dead and Reborn as Phoenix
...
これは、ビジネスルールを説明する具体的な例です。ステップのリストで構成されています。
キーワードScenario
は、キーワードExample
の同義語です。
ステップの数はいくつでも構いませんが、例ごとに3〜5ステップを推奨します。ステップが多すぎると、例が仕様とドキュメントとしての表現力を失う原因となります。
例は、仕様とドキュメントであることに加えて、テストでもあります。全体として、あなたの例はシステムの実行可能な仕様です。
例は次のパターンに従います。
Given
ステップ)When
ステップ)Then
ステップ)各ステップは、Given
、When
、Then
、And
、またはBut
で始まります。
Cucumberは、シナリオ内の各ステップを記述した順番に1つずつ実行します。Cucumberがステップを実行しようとすると、実行する一致するステップ定義を探します。
ステップ定義を探す際に、キーワードは考慮されません。これは、別のステップと同じテキストを持つGiven
、When
、Then
、And
、またはBut
ステップを持つことができないことを意味します。
Cucumberは、次のステップを重複と見なします。
Given there is money in my account
Then there is money in my account
これは制限のように見えるかもしれませんが、より曖昧さがなく、より明確なドメイン言語を考案することを強制します。
Given my account has a balance of £430
Then my account should have a balance of £430
Given
ステップは、システムの初期コンテキスト、つまりシナリオの場面を記述するために使用されます。通常は過去に起こったことです。
CucumberがGiven
ステップを実行すると、オブジェクトの作成と構成、またはテストデータベースへのデータの追加など、システムを明確に定義された状態に設定します。
Given
ステップの目的は、ユーザー(または外部システム)がシステムと対話(When
ステップ)し始める前に、システムを既知の状態にすることです。Given
ではユーザーとの対話については触れないようにします。ユースケースを作成する場合、Given
は前提条件になります。
複数のGiven
ステップを使用しても問題ありません(読みやすくするために、2番目以降にはAnd
またはBut
を使用します)。
例
When
ステップは、イベントまたはアクションを記述するために使用されます。これは、人がシステムと対話する場合もあれば、別のシステムによってトリガーされるイベントの場合もあります。
例
Then
ステップは、期待される結果または結果を記述するために使用されます。
Then
ステップのステップ定義では、実際の結果(システムが実際に実行すること)と期待される結果(ステップがシステムが実行するべきであると述べていること)を比較するためにアサーションを使用する必要があります。
結果は、観測可能な出力であるべきです。つまり、システムから出力されるもの(レポート、ユーザーインターフェース、メッセージ)であり、システムの内部深く埋め込まれた動作(データベースのレコードなど)ではありません。
例
データベースを調べるために`Then`ステップを実装したくなるかもしれませんが、その誘惑に抵抗してください!
ユーザー(または外部システム)にとって観察可能な結果のみを検証する必要があります。データベースへの変更は通常、観察可能ではありません。
連続した`Given`または`Then`がある場合、次のように記述できます。
Example: Multiple Givens
Given one thing
Given another thing
Given yet another thing
When I open my eyes
Then I should see something
Then I shouldn't see something else
または、連続した`Given`または`Then`を`And`と`But`で置き換えることで、より流動的な構造の例を作成できます。
Example: Multiple Givens
Given one thing
And another thing
And yet another thing
When I open my eyes
Then I should see something
But I shouldn't see something else
Gherkinは、通常のステップキーワードの代わりにアスタリスク(`*`)を使用することもサポートしています。これは、事実上「もののリスト」であるステップがある場合に役立ちます。これにより、そうでなければ`And`などの自然言語ではそれほどエレガントに読めないものを、箇条書きのように表現できます。
例:
Scenario: All done
Given I am out shopping
And I have eggs
And I have milk
And I have butter
When I check my list
Then I don't need anything
次のように表現できます
Scenario: All done
Given I am out shopping
* I have eggs
* I have milk
* I have butter
When I check my list
Then I don't need anything
時々、`Feature`内のすべてのシナリオで同じ`Given`ステップを繰り返していることに気付くでしょう。
これは、すべてのシナリオで繰り返されるため、これらのステップはシナリオを記述するために「不可欠」ではなく、「付随的な詳細」であることを示しています。そのような`Given`ステップは、`Background`セクションの下にグループ化することで、文字通りバックグラウンドに移動できます。
`Background`を使用すると、それに続くシナリオにコンテキストを追加できます。1つ以上の`Given`ステップを含めることができ、これらは各シナリオの前に実行されますが、任意のBeforeフックの後です。
`Background`は、最初の`Scenario` / `Example`の前に、同じインデントレベルに配置されます。
例:
Feature: Multiple site support
Only blog owners can post to a blog, except administrators,
who can post to all blogs.
Background:
Given a global administrator named "Greg"
And a blog named "Greg's anti-tax rants"
And a customer named "Dr. Bill"
And a blog named "Expensive Therapy" owned by "Dr. Bill"
Scenario: Dr. Bill posts to his own blog
Given I am logged in as Dr. Bill
When I try to post to "Expensive Therapy"
Then I should see "Your article was published."
Scenario: Dr. Bill tries to post to somebody else's blog, and fails
Given I am logged in as Dr. Bill
When I try to post to "Greg's anti-tax rants"
Then I should see "Hey! That's not your blog!"
Scenario: Greg posts to a client's blog
Given I am logged in as Greg
When I try to post to "Expensive Therapy"
Then I should see "Your article was published."
`Background`は、たとえば`Rule`レベルでもサポートされています。
Feature: Overdue tasks
Let users know when tasks are overdue, even when using other
features of the app
Rule: Users are notified about overdue tasks on first use of the day
Background:
Given I have overdue tasks
Example: First use of the day
Given I last used the app yesterday
When I use the app
Then I am notified about overdue tasks
Example: Already used today
Given I last used the app earlier today
When I use the app
Then I am not notified about overdue tasks
...
`Feature`または`Rule`ごとに`Background`ステップのセットを1つだけ持つことができます。異なるシナリオに異なる`Background`ステップが必要な場合は、シナリオのセットをより多くの`Rule`またはより多くの`Feature`に分割することを検討してください。
`Background`のより明示的でない代替手段については、条件付きフックを確認してください。
`Scenario Outline`キーワードは、異なる値の組み合わせで同じ`Scenario`を複数回実行するために使用できます。
`Scenario Template`キーワードは`Scenario Outline`キーワードの同義語です。
異なる値を使用するためにシナリオをコピーして貼り付けることは、すぐに面倒で反復的になります。
Scenario: eat 5 out of 12
Given there are 12 cucumbers
When I eat 5 cucumbers
Then I should have 7 cucumbers
Scenario: eat 5 out of 20
Given there are 20 cucumbers
When I eat 5 cucumbers
Then I should have 15 cucumbers
これらの2つの類似したシナリオを`Scenario Outline`にまとめることができます。
Scenario Outlineを使用すると、`< >`で区切られたパラメーターを使用して、これらのシナリオをより簡潔に表現できます。
Scenario Outline: eating
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
`Scenario Outline`には、1つ以上の`Examples`(または`Scenarios`)セクションが含まれている必要があります。そのステップは、直接実行されることのないテンプレートとして解釈されます。代わりに、`Scenario Outline`は、その下の`Examples`セクションの各行(最初のヘッダー行を除く)に対して1回実行されます。
ステップは、例テーブルのヘッダーを参照する`< >`で区切られた*パラメーター*を使用できます。Cucumberは、ステップをステップ定義と照合しようとする*前*に、これらのパラメーターをテーブルからの値で置き換えます。
複数行ステップ引数でもパラメーターを使用できます。
場合によっては、1行に収まるよりも多くのデータをステップに渡したい場合があります。この目的のために、Gherkinには`Doc Strings`と`Data Tables`があります。
`Doc Strings`は、より大きなテキストをステップ定義に渡すのに便利です。
テキストは、独自の行にある3つの二重引用符で構成されるデリミタでオフセットする必要があります。
Given a blog post named "Random" with Markdown body
"""
Some Title, Eh?
===============
Here is the first paragraph of my blog post. Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
"""
ステップ定義では、このテキストを見つけてパターンに一致させる必要はありません。ステップ定義の最後の引数として自動的に渡されます。
開始`"""`のインデントは重要ではありませんが、一般的な慣例は、囲んでいるステップから2つのスペースです。ただし、3重引用符内のインデントは重要です。Doc Stringの各行は、開始`"""`に従ってインデントが解除されます。開始`"""`の列を超えるインデントは、保持されます。
Doc Stringsは、デリミタとして3つのバックティックを使用することもサポートしています。
Given a blog post named "Random" with Markdown body
```
Some Title, Eh?
===============
Here is the first paragraph of my blog post. Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
```
Markdownで記述することに慣れている人には、これは馴染みがあるかもしれません。
含まれるコンテンツの種類でDocStringに注釈を付けることができます。コンテンツの種類は、3重引用符の後に次のように指定します。
Given a blog post named "Random" with Markdown body
"""markdown
Some Title, Eh?
===============
Here is the first paragraph of my blog post. Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
"""
`Data Tables`は、値のリストをステップ定義に渡すのに便利です。
Given the following users exist:
| name | email | twitter |
| Aslak | aslak@cucumber.io | @aslak_hellesoy |
| Julien | julien@cucumber.io | @jbpros |
| Matt | matt@cucumber.io | @mattwynne |
`Doc Strings`と同様に、`Data Tables`はステップ定義に最後の引数として渡されます。
表セルの改行文字を使用する場合は、`\n`として記述できます。セルの一部として`|`が必要な場合は、`\|`としてエスケープできます。最後に、`\`が必要な場合は、`\\`でエスケープできます。
Cucumberは、ステップ定義内からテーブルを操作するための豊富なAPIを提供しています。詳細については、Data Table APIリファレンスを参照してください。
Gherkinで選択する言語は、ユーザーとドメインエキスパートがドメインについて話す際に使用する言語と同じである必要があります。2つの言語間の翻訳は避けるべきです。
そのため、Gherkinは70以上の言語に翻訳されています。
ノルウェー語で記述されたGherkinシナリオを次に示します。
# language: no
Funksjonalitet: Gjett et ord
Eksempel: Ordmaker starter et spill
Når Ordmaker starter et spill
Så må Ordmaker vente på at Gjetter blir med
Eksempel: Gjetter blir med
Gitt at Ordmaker har startet et spill med ordet "bløtt"
Når Gjetter blir med på Ordmakers spill
Så må Gjetter gjette et ord på 5 bokstaver
フィーチャファイルの最初の行にある`# language:`ヘッダーは、使用する言語をCucumberに指示します。たとえば、フランス語の場合は`# language: fr`です。このヘッダーを省略すると、Cucumberはデフォルトで英語(`en`)になります。
一部のCucumber実装では、構成でデフォルトの言語を設定することもできるため、すべてのファイルに`# language`ヘッダーを配置する必要はありません。
このドキュメントの改善にご協力ください。このページを編集する。