ガーキンシナリオの概要または複数のシナリオ?

マークチドロー

BDDのGherkin形式で受け入れ基準を定義するときに好ましいアプローチはありますか?

次のようにシナリオを分割する必要があります...

Scenario: User saves contact details
Given I am on the contact details page
When I enter the following details
| email          | phone     |
| [email protected] | 012345678 |
And I save the details
Then the details are correctly saved

Scenario: User saves contact details with a very long email address
Given I am on the contact details page
When I enter the following details
| email                                                         | phone     |
| [email protected] | 012345678 |
And I save the details
Then the details are correctly saved

Scenario: User saves contact details with a very long phone number

etc

または、複数のアウトラインを持つ単一のシナリオを使用する必要がありますか?

Scenario: User saves contact details
Given I am on the contact details page
When I enter the following details
| email   | phone   |
| <email> | <phone> |
And I save the details
Then the details are correctly saved

Examples: 
| email                                                         | phone                 |
| [email protected]                                                | 012345678             |
| [email protected] | 012345678             |
| [email protected]                                                | 012345678901234567890 |

後者は適応/追加が簡単かもしれませんが、私にはシナリオの基本的な概念が失われます。

更新私はちょうどこの正確なポイントを議論する次の記事に出くわしました。後者を提案することはより良いアプローチです。https://www.hindsightsoftware.com/blog/scenario-outlines

次のようなことを示唆しています。

Scenario: User saves contact details
Given I am on the contact details page
When I enter the following details
| email   | phone   |
| <email> | <phone> |
And I save the details
Then the details are correctly saved

Examples: 
| scenario                  | email                                                         | phone                 |
| basic details saved       | [email protected]                                                | 012345678             |
| very long email address   | [email protected] | 012345678             |
| very long phone number    | [email protected]                                                | 012345678901234567890 |
グレッグ・バーグハート

一般的な慣例として、入力を変更しても同じ出力を期待する場合は、シナリオの概要に適しています。

Thenステップをパラメーター化することはできますが、テストのアサーションを変更すると、テストが根本的に変更されたことを意味するため、これはお勧めしません。これは哲学的でコードのメンテナンスの問題です。

電話番号の最大長を考えてみましょう。例では11文字です。11文字が最大で、その境界の両側をテストするシナリオの概要がある場合、シナリオには失敗する理由が複数あります。まず、11が最大長ではなくなった場合、さらに12が最大長になった場合、そのテストも失敗します。

失敗する複数の理由があるテストは「不安定」です

以下のシナリオの概要は、アサーションと入力を変化させます。つまり、このテストが失敗する理由は複数あります。

Scenario Outline: User saves contact details
    Given I am on the contact details page
    When I enter the following details
        | email          | phone   |
        | [email protected] | <Phone> |
    And I save the details
    Then the details <Assertion> correctly saved

Examples:
    | Phone                  | Assertion |
    | 012345678901234567890  | Are       |
    | 0123456789012345678901 | Are Not   |

電子メールのシナリオを電話番号のシナリオから分離することもお勧めします。

すべてのテストには、失敗する理由が1つだけあるはずです。

以下の2つのシナリオは互いに重複しているように見えますが、入力の大部分の一貫性を保ち、入力の1つを変更するだけで、明らかな理由で失敗するより安定したテストが得られます。

Scenario Outline: User saves contact phone number
    Given I am on the contact details page
    When I enter the following details
        | email          | phone   |
        | [email protected] | <Phone> |
    And I save the details
    Then the details are correctly saved

Examples:
    | Phone                 |
    | 012345678             |
    | 012345678901234567890 |

Scenario Outline: User saves contact e-mail address
    Given I am on the contact details page
    When I enter the following details
        | email   | phone     |
        | <Email> | 012345678 |
    And I save the details
    Then the details are correctly saved

Examples:
    | Email                                                         |
    | [email protected]                                                |
    | [email protected] |

これで、シナリオが失敗したときに、シナリオ名から、アプリケーションのどの部分が原因であるかについてのヒントが得られ、デバッグに役立ちます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

例を含むキュウリシナリオの概要:シナリオランナーの作成に失敗しました

分類Dev

次のシナリオの複合主キーまたは主代理キー?

分類Dev

複数行のJSONの空手でのシナリオの概要

分類Dev

SpecFlow:シナリオの概要の例

分類Dev

複数のキュウリシナリオの概要で同じ例を使用する

分類Dev

複数のシナリオでのSQLOrder by

分類Dev

キュウリシナリオの概要を使用したExcelスプレッドシートの処理

分類Dev

SpecFlowは、前のシナリオがアサーションに失敗した場合、シナリオをスキップします

分類Dev

動的SumIF-複数のシナリオ

分類Dev

CucumberJSシナリオの概要、ステップコードの作成

分類Dev

キュウリシナリオの概要にネストされた例-値のリストまたはマップ

分類Dev

Specflow-データテーブルを使用したシナリオの概要

分類Dev

ガトリングシナリオとシミュレーションの間で引数を渡す

分類Dev

複数のシナリオがある場合はハングしますが、1つのシナリオで機能します

分類Dev

複数のラジオボタンのアクションリスナー

分類Dev

高速ルート内の複数の機能/シナリオを処理するための最良の方法は?

分類Dev

キュウリのテスト-シナリオの概要のサンプルテーブルを小さなチャンクに分割します

分類Dev

キュウリのガーキンは同じシナリオで異なるデータファイルを使用します

分類Dev

2人または複数のユーザーが同じコンテンツで作業しているシナリオ

分類Dev

キュウリのシナリオの概要を並行して実行する

分類Dev

前のシナリオがdoIfを使用して渡された場合、ガトリング次のシナリオを実行する必要があります

分類Dev

特定のシナリオの前後にトリガー

分類Dev

ボタンがクリックされてコマンドが実行されると、複数のテキストボックスで明示的なWpf更新ソーストリガーが発生します。MVVMシナリオの場合

分類Dev

単一のキュウリのシナリオで複数のThenを使用するのは正しいですか?

分類Dev

モデルのYii2検証ルールには複数のシナリオがあります

分類Dev

ガトリング:シナリオ内での同時実行

分類Dev

このシナリオのイベントリスナー

分類Dev

シナリオ概要の特定の例のみを実行する

分類Dev

空手-シナリオ概要の例セクションでDBからデータを取得する方法はありますか?

Related 関連記事

  1. 1

    例を含むキュウリシナリオの概要:シナリオランナーの作成に失敗しました

  2. 2

    次のシナリオの複合主キーまたは主代理キー?

  3. 3

    複数行のJSONの空手でのシナリオの概要

  4. 4

    SpecFlow:シナリオの概要の例

  5. 5

    複数のキュウリシナリオの概要で同じ例を使用する

  6. 6

    複数のシナリオでのSQLOrder by

  7. 7

    キュウリシナリオの概要を使用したExcelスプレッドシートの処理

  8. 8

    SpecFlowは、前のシナリオがアサーションに失敗した場合、シナリオをスキップします

  9. 9

    動的SumIF-複数のシナリオ

  10. 10

    CucumberJSシナリオの概要、ステップコードの作成

  11. 11

    キュウリシナリオの概要にネストされた例-値のリストまたはマップ

  12. 12

    Specflow-データテーブルを使用したシナリオの概要

  13. 13

    ガトリングシナリオとシミュレーションの間で引数を渡す

  14. 14

    複数のシナリオがある場合はハングしますが、1つのシナリオで機能します

  15. 15

    複数のラジオボタンのアクションリスナー

  16. 16

    高速ルート内の複数の機能/シナリオを処理するための最良の方法は?

  17. 17

    キュウリのテスト-シナリオの概要のサンプルテーブルを小さなチャンクに分割します

  18. 18

    キュウリのガーキンは同じシナリオで異なるデータファイルを使用します

  19. 19

    2人または複数のユーザーが同じコンテンツで作業しているシナリオ

  20. 20

    キュウリのシナリオの概要を並行して実行する

  21. 21

    前のシナリオがdoIfを使用して渡された場合、ガトリング次のシナリオを実行する必要があります

  22. 22

    特定のシナリオの前後にトリガー

  23. 23

    ボタンがクリックされてコマンドが実行されると、複数のテキストボックスで明示的なWpf更新ソーストリガーが発生します。MVVMシナリオの場合

  24. 24

    単一のキュウリのシナリオで複数のThenを使用するのは正しいですか?

  25. 25

    モデルのYii2検証ルールには複数のシナリオがあります

  26. 26

    ガトリング:シナリオ内での同時実行

  27. 27

    このシナリオのイベントリスナー

  28. 28

    シナリオ概要の特定の例のみを実行する

  29. 29

    空手-シナリオ概要の例セクションでDBからデータを取得する方法はありますか?

ホットタグ

アーカイブ