3

したがって、私のアプリケーションには、サイトに登録されているすべてのユーザーのリストを含むグリッドがあります。ここで、specflow と WatiN を使用してテストしたいと思います。

次のシナリオを思いつきました。

Scenario: List of users
    Given I am logged in as "Admin" user
    And There exists following users
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |
    When I go to all users page
    Then There should be following users in table
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |

問題は、このテーブルがステップ間で重複していることであり、これが正しい方法かどうかわかりません。データがグリッドにロードされているかどうかをテストするより良い方法はありますか?

4

2 に答える 2

4

このテストに別の方法でアプローチすることもできますが、次のアプローチはシナリオからデータの重複を取り除きますが、テストでは各ユーザーを個別にチェックするため、必ずしもより効率的ではありません。

できることは、テストを書き直して、Specflow のシナリオ アウトライン機能を利用することです。次に、シナリオを次のように書き直す場合、ユーザー データを 1 回定義するだけで済みます。

Scenario Outline: List of users
 Given I am logged in as "Admin" user
 And There exists <Username> with <First name> <Last Name> and <Registration date>
 When I go to all users page
 Then There should be <Username> with <First name> <Last Name> and <Registration date>

   examples:
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
于 2013-10-29T23:36:11.873 に答える
1

問題を正しく理解しているかどうかを確認するには、1 つのシナリオの [Given] と [Then] の手順でテーブルの定義を繰り返していることに注意してください (つまり、すべて同じテーブルのセットアップが必要な 100 の同様のシナリオを実行していない)。

持っているものは大丈夫そうです。

UI で少量のデータ変換が必要な場合にどうなるかを考えてみてください。例えば

Given I am logged in as "Admin" user
And There exists following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | Wonderland| 2013-10-28        |
    | bob      | Bobby      | Tables    | 2013-10-27        |
When I go to all users page
Then There should be following users in table
    | Username | Full Name        | Registration date |
    | alice    | Alice Wonderland | 2013-10-28        |
    | bob      | Bobby Tables     | 2013-10-27        |

このシナリオは明らかで、ここでスペースを節約することはできませんでした。

行ったように表を正確に繰り返すことにより、ページに表示される内容がメモリ内のデータ表現と正確に一致する必要があることをテスト/ライブ ドキュメントで明確にします。これはテストで表現する価値があります。

スペースを節約できるその他のオプション:

Given I am logged in as "Admin" user
And there exists the following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
When I go to all users page
Then I should be able to see all the users

これはあまり明確ではなく、Then ステップを設定して、Given ステップとデータを共有するか、実際にモック データ コンテキスト自体をクエリする必要があります (テストが間違った理由でパスする可能性があるため、非常に悪い計画です)。

#define再利用可能な複数行の文字列 const を設定するための C++ のキーワードがあるかどうかを尋ねている場合、私の知る限りではありません。

結論として、私はあなたのテストがそのまま気に入っています。:)

---- 編集 ---- 後付け:

テストが失敗する理由は 1 つだけです。おそらく、あなたのテストは「テーブルデータが正確に正しい」ことをテストしています。

しかし、より単純なものをテストしたい場合もあります。例えば

Then user 'alice' should appear in the users table
于 2013-10-28T10:50:49.287 に答える