典型的な CRUD シナリオを定義するときに、テスト データを指定するための 2 つのオプションがあることに気付きました。
オプション 1: 使用するデータを記述し、実装にデータを定義させる
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have typed in a valid name
And I have typed in a valid code
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the created region details
オプション 2: 使用するテスト データを明示的に述べる
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have filled out the form as follows
| Label | Value |
| Name | Europe |
| Code | EUR |
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the following fields
| Name | Code |
| Europe | EUR |
利点と欠点に関して、私たちが確立したことは次のとおりです。
オプション 1 は、「有効な名前」の定義が変更された場合を適切にカバーします。テスト データが複数の場所にあるオプション 2 を使用した場合、これに対処するのがより困難になる可能性があります。オプション 1 は、特に「無効なクレジット カード番号を入力した」などのシナリオの場合に、このテストのデータで何が重要かを明示的に説明します。また、実装よりも説明に関心があり、どういうわけかより抽象的でBDDを「感じ」ます。
ただし、オプション 1 では、再利用が難しい非常に特殊な手順を使用します。たとえば、「作成されたリージョンの詳細をページに表示する必要があります」は、おそらくこのシナリオでのみ使用されます。逆に、オプション 2 の「ページには次のフィールドを表示する必要があります」を実装して、他のシナリオで何度も再利用できるようにすることもできます。
また、オプション 2 は、「有効」などのより抽象的な用語を解釈する必要がなく、例によって何が起こっているかを確認できるため、よりクライアントフレンドリーに見えると思います。ただし、オプション 2 はより脆弱でしょうか? モデルのリファクタリングは、これらのテストを中断することを意味する場合がありますが、テスト データがコードで定義されている場合、コンパイラはモデルの変更に役立ちます。
ここに正解も不正解もありませんが、どちらを使用するかをどのように決定するかについて、人々の意見を聞きたいと思います。
ありがとう!