11

Gherkin でシナリオを定義する場合、Given ステップと When ステップの間に明確な区別がない場合があります。つまり、ユーザーからのシステムとのアクティブな対話はなく、検証の目的は、特定の状況下でシステムがどのように見えるかを検証することです。

次の点を考慮してください。

Scenario: Show current balance
Given user is on account page
Then user should see his balance

Scenario: Show current balance
When user goes to account page
Then user should see his balance

常に 2 番目のバリアントを使用するかどうかはわかりません。「ユーザーはアカウントページにいます」というコンテキストを共有する複数のシナリオがあり、そのうちのいくつかには追加のユーザーアクションがあり、他のユーザーには含まれていない場合、「アカウントページのユーザー」を特定のステップとして保持することが有効であるように思われます一部のシナリオでは「いつ」が欠けている場合がありますが。これは有効なアプローチですか?

4

4 に答える 4

17

形式的にも技術的にも、Cucumber/SpecFlow では When-step を記述する必要はなく、Given/When/Then はシナリオに記述されている順序で実行されるだけです。その点で、When-ステップは必要ありません。

しかし、Andy Waite が書いたように、When-ステップは、システムが "Setup" から新しい状態に到達するためのアクションまたはイベントを示し、それを Then-ステップで検証します。その点で、すべてのテストにWhenステップが存在する必要があります(あなたが書いたように:それ以外の場合は何をテストしていますか)。

それはあなたの最後のコメントを残します。セットアップだけを検証するのはどうですか (システムが開始されているとすれば、単純な例としてデータベースはクリーンです)。このようなシナリオでは、When ステップをスキップできます。

したがって、いつものように、読みやすさと理解度に帰着します。シナリオは、システムの動作に関する私たちの考えを具体的かつ明確にするために書かれています。問題の行動を理解し、学習するために最適化されたフォームを使用してください。

これについてあまり深く考えなくても、一般的なアドバイスは、イベントや動作を非常に明確かつ明確にする When ステップを常に使用することであると推測できます。可能であれば、暗黙的で隠された行動を避けます。

これが役立つことを願っています。

于 2013-04-09T09:18:23.480 に答える
6

通常、シナリオは 3 つの部分で構成されます。

  • セットアップ (与えられた)
  • アクション(いつ)
  • 検証(Then)

セットアップが不要な場合もあります (または暗黙的です)。しかし、アクションと検証が必要ない状況は考えられません。

于 2013-04-09T07:32:18.937 に答える
4

ここでは Andy + Marcus に同意しますが、役に立つかもしれないコメントがいくつかあります。

  1. Gherkin 機能ファイルは、システムの動作に関する生きたドキュメントとして機能する必要があります。このため、シナリオでは、開発者やその他のプロジェクト関係者 (製品所有者、テスターなど) に、その機能を具現化するビジネス ルールを伝えるのに十分な詳細を提供する必要があります。

    あなたの質問は、シナリオを明確にする際に、このビジネス ルールを端から端まで考慮しなかったために生じたのではないかと思います。バランスとは何ですか?したがって、少なくとも概念を伝えるための手順が必要になると思います。つまり、ユーザーが自分のバランスを見る前に、バランスを取らなければならないということです。

    Scenario: Show current balance
      Given I have a balance
       When I go to my account page
       Then I should see my balance
    
  2. システムが正しく機能していることを明確にテストできるように、システムの状態 (つまり、任意の「与えられた」ステップ) を設定することが重要です。いくつかの引数を指定して、これをより明確にしたい場合があります。

    Scenario: Show current balance
      Given my balance is £10
       When I go to my account page
       Then I should see my balance as £10
    
  3. どの BDD フレームワークを使用しているかはわかりませんが、複数の Gherkin ステップをステップ定義にマップできる Behat を使用しています。いえ

    user is on account page
    user goes to account page
    

    どちらも、ユーザーをページにナビゲートするステップ定義にマップできます。システムの動作は同じです。2 つを区別する唯一の理由は、シナリオを読みやすくすることです。

于 2013-04-10T00:21:36.730 に答える
0

私の理解では、シナリオを書くときに必要なステップは 3 つです。

  1. アプリケーションが最初にあるべき状態。
  2. 特定の状態に到達するためにユーザーがしなければならないこと。
  3. ユーザーのアクションの結果/入力、つまりシナリオの終点。

したがって、シナリオは次のようになります。

Given the user is on the profile page
When the user goes to the balance page
Then the user should see their balance

プロファイル ページは、ユーザーがボタンまたはリンクをクリックして残高にアクセスできる場所になります。

次に背景があります:

Given the user is logged in
And the user has a balance
于 2013-04-11T06:32:28.437 に答える