2011-12-13 5 views
0

私は、当社の自動支払い処理サービスを開発しています。私たちは、スペックの流れを実装しようとしているとの条件条件時にマルチパートのSpecFlowフックを実装するにはどうすればよいですか?

Scenario Outline: Stub matches NEXT oldest outstanding bill 
    Given I have a group with the following bills: 
     | Id  | Due Date | Status    | Amount Due | 
     | Bill A | 9/14/2011 | <Oldest Bill Status> | 1100.00 | 
     | Bill B | 10/14/2011 | Unpaid    | 1200.00 | 
     | Bill C | 11/14/2011 | Unpaid    | 1300.00 | 
    When a stub is received that matches 'Bill B' 
      And the Payment Amount is <Payment Amount> 
    Then the allocation result should <Allocation Result> 
      And Review should <Review> 
Examples: 
    | Oldest Bill Status | Allocation Result | Review  | Payment Amount | 
    | Reconciled   | Allocate to Bill | not required | 1200.00  | 

[When(@"a stub is received that matches '(.*)'")] 
     public void WhenAStubIsReceivedThatMatches(string billKeyName) 
     { 
      // Method 
      } 

私は結果ステップを実行する前に、両方の条件を処理するためのフックを変更する方法を確認していないときに我々は成功した1のためにそれを行っています。

答えて

1

複数のWhen節があると言われています...私は、あなたがこの質問をしている理由を理解し(なぜ説明するのか)考えていると思います。お互いに依存しているので、いくつかのアクションを一緒にするのはかなり難しいです。

シンプルなWhen節を使用して仕様を記述し、さまざまなシナリオを記述して、相互作用するさまざまな方法を記述してください。

あなたのシナリオでは、あなたが望むならば、与えられた状態からThen-stateに移行するために起こる重要な状態遷移が何であるかを調べてみてください。

これは、最初に続いて、ステップを記入し始め、その後

  • 短いタイトルを書く
    • 書き込みのシナリオのために、私が有用であることが分かってきた少しレシピです。あなたは何になるの?どのような主張が必要ですか?
    • それから、When-stepsを書いてください。どのように私はその状態になるのですか
    • そして、与えられたステップを書いてください。 When節を実行するには、どのようなコンテキストが必要ですか?
    • タイトルを改訂し、検討が必要な他のシナリオを考え出しているかどうかを確認します。

    私はGjoko Adzicと数週間前にコースにいて、このようなヒントをたくさん集めました。 Read about it here

  • +0

    *私はあなたが理解できると思う(と説明する)理由は - 実際にはそれ以外のコードをすることができない可能性があります私はなぜわからない。これは、当社のビジネスルールで要求されているように、マトリックスとマトリックスを比較する有効な解決策のようです。与えられたものを書き換えて、それを単一のものに制限するときは、コードを再利用する能力と機能ファイルの読みやすさが低下します。私はwhen節のために複数の部分reg-exでこれを行うことができますが、キュウリのブログはこれをアンチパターンとみなしました。 – Chad

    +0

    @Chadまあ、私が言及しているコードは複雑です。マトリックスからマトリックスへのルールは非常に複雑に聞こえますが、ガーキンテーブルでそれを手助けできますか?シナリオの確認例(https://github.com/cucumber/cucumber/wiki/Scenario-outlines) –

    +0

    お支払い金額は実際には結果テーブルと査読ステータスとともにサンプルテーブルに表示されます。ビジネスルールは複雑ですが、これはビジネスルールを定義する最も簡単な方法です。私の考えは、いつ私は支払いの量が必要ではないテストのために設定されたときにいつの後に要求を実行し、再利用するときに、フックを使用してリクエストを設定することができます。これは不可能ですか? – Chad

    2

    ベストプラクティスは、1つのステートメントを持つことです。

    いくつかのオプションが含まれます:

    ​​

    そのために:

    [When(@"a stub is received that matches '(.*)' for ([\d\.]*)")] 
    public void WhenAStubIsReceivedThatMatches(string billKeyName, decimal amount) 
    { 
        // create stub and "recieve" it 
    } 
    

    OR

    Given ...etc... 
    And I have a stub is received that matches 'Bill B' for <Payment Amount> 
    When I receive the stub 
    

    ...スタブ自体がテストされているオブジェクトではないので、それは背景ですデータとあなたのgivensの一部として賢明に作成することができます。

    +0

    このテストでは、スタブはテストされていません。私は元のテストのためにいつでも再利用できることを望んでいましたが、それは可能ではない(または少なくとも私はそれをやるべきではありません)ようです。 – Chad

    関連する問題