6

それで、私はしばらくspecflowを使用してきましたが、何かが私を悩ませています。

これは、現在使用しているシナリオの例です。

Scenario: Select a region via selection button
    When I select "Scotland" from Available Regions
    And I click on the "Select One" button
    Then Available Regions does not contain "Scotland"
    And Selected Regions contains "Scotland"

ほぼすべてのセリフで「スコットランド」と言うのを避けるべきアウェイはありますか? それとも読みやすくするので、そのままにしておくべきですか?

4

4 に答える 4

7

あなたの質問に答える前に、Dan North のWho's domain is it とにかくを読むことをお勧めします。

したがって、最初に、 という行を削除したいと思います。And I click on the "Select One" button暗黙のうちに の一部であるべきだと思うからですWhen I select "Scotland" from Available regions

今、あなたは持っています

Scenario: Select a region 
    When I select "Scotland" from Available Regions
    Then Available Regions does not contain "Scotland"
    And Selected Regions contains "Scotland"

そして、あなたはそれを次のように書くことができます

Scenario: Select a region 
    When I select "Scotland" from Available Regions
    Then Available Regions does not contain the last selected region
    And Selected Regions contains the last selected region

違いはありますか?おそらくそうではありません。

cucumber に多くの時間を費やしてわかったことは、シナリオの背後にあるコードをリファクタリングするのと同じくらい、シナリオをリファクタリングするのに役立つということです。C#/SpecFlow では実装できます

    Then Available Regions does not contain "Scotland"

    [Then("Available Regions does not contain (.*)")]
    public void ThenAvailableRegionsDoesNotContain(string region)
    {
        AvailableRegions.Contains(region).ShouldBeFalse();
    }

    Then Available Regions does not contain the last selected region

    [Then("Available Regions does not contain the last selected region")]
    public void ThenAvailableRegionsDoesNotContainLastSelectedRegion()
    {
        ThenAvailableRegionsDoesNotContain(LastSelectedRegion);
    }

それは正直にあなた次第です。どちらの方言が好きですか

于 2012-09-18T17:58:52.737 に答える
2

このシナリオのタイトルを修正することをお勧めします。「地域を選択する」は、この例から何を期待するかを実際に伝えているわけではありません。領域を選択したときにトリガーされる複雑な動作や、選択した領域が使用可能な領域から選択された領域のリストに移動するなどの小さな UI の詳細である可能性があります。

あなたの例を正しく理解していれば、それは後者なので、次のようなタイトルをお勧めします。

Scenario: Selected region should be moved from available to selected regions

より表現力豊かなタイトルを持つことには、利点があります。

1) 特定の詳細を探している場合、ライブ ドキュメント内の関連する例をすばやくナビゲートして見つけることができます。例全体を読んでその意図をリバース エンジニアリングするよりも、表現力豊かなタイトルを読む方が常に高速です。

2) より複雑なシナリオ (この例はそうではないようです) の場合、シナリオの意図を伝える表現力豊かなタイトルは、読者がシナリオの詳細をより迅速に理解するのに役立ちます。

シナリオを読みやすくするために、アサーションを 1 つのステップに結合します。実際には、選択したアイテムが利用可能リストから選択済みリストに移動したことをアサートしたいからです。

Scenario: Selected region should be moved from available to selected regions
  When I select "Scotland" from "Available Regions"
  Then "Scotland" should be moved from "Available Regions" to "Selected Regions"

これは、会話で誰かにこの詳細を説明する方法にかなり近いと思います。ここで「スコットランド」を繰り返しても構いませんが、AlSki がすでに指摘したように、「スコットランド」を「選択された地域」に置き換えることを好む人もいるかもしれません。それは好みの問題であり、私は通常、シナリオについての会話中に実際にどのような言葉が使用されたかを聞くようにしています。

マイナーな注意として、これは非常に低レベルの UI の詳細に関するシナリオであるという印象があることを述べておきたいと思います。特定の地域を選択したときに、それがどのような高レベルの影響を与えるかについては、もっと興味があります (地域の選択が特定のビジネス関連性を持っている場合)。また、シナリオでこのような低レベルの UI の詳細の検証を本当に記述して自動化したい場合は、シナリオの表現方法でもこれを示すことを検討します。

Scenario: Selected region should be moved from available to selected regions list
  When I select "Scotland" from the "Available Regions" list
  Then "Scotland" should be moved from the "Available Regions" to "Selected Regions" list

もちろん、元のシナリオではリストについて書いていないので、シナリオでリストの詳細な UI 動作を説明していると仮定しました。説明している内容が UI に関するものでない場合は、これをより適切に表現するために、シナリオを別の表現にする必要があります。

于 2012-09-30T09:44:51.140 に答える
1

いくつかのリファクタリングが良いアイデアであるという@AlSkiに同意しますが、Examples構文を使用して同じ値を複数回使用できます。

Scenario Outline: Select a region
  Given do this "<value>"
  And do that "<value>"
  When we perform "<value>"
  Then we get "<value>"
Examples:
  | value    |
  | Scotland |

テーブルに複数のエントリを追加して、毎回異なる値で同じテストを何度も実行することもできます。

...
Examples:
  | value    |
  | Scotland |
  | England  |
  | Wales    |

以下は複数の値を持つ例で、次のようなことができます:

Scenario Outline: Select a region
  Given do this "<value>" with "<area>"
  And do that "<value>"
  When we perform "<value>"
  Then we get "<result>"
Examples:
  | value    | area   | result |
  | Scotland | North  | 40     |
  | Scotland | South  | 100    |
  | England  | West   | 200    |
  | England  | North  | 180    |
于 2012-09-19T14:21:37.183 に答える