2016-12-12 4 views
0

スポークテストで条件の場合when/thenを書き込むことができますか?コードはこのように見えます。ここで私は時と時の呼び出しを制御しようとしています。スポークテストで条件の場合に `when` /` then`を書くことができます

def testMethod(){ 
    given: 
     if(some Condition) { 
      when: 
       eventOne Occurred 
      then: 
       assertion based on eventOne 
     } else if (some Condition) { 
      when: 
       eventTwo Occurred 
      then: 
       assertion based on eventTwo 
     } else { 
      when: 
       eventThree Occurred 
      then: 
       assertion based on eventThree 
     } 
    where: 
     iteration here. 
} 

答えて

1

この目的は何ですか? given-when-thenのアプローチは、自動テストを理解しやすくするために設計されています。ここに示した例は、あなたのテストを読んで理解することになります。そして私はそれがコンパイルされないと確信しています。

テストを簡単にしてください。 whereは、テスト(パラメータ化されたテスト)にパラメータを提供するために使用されます。

@Unroll  
def "should return #result for parameters(#a,#b)"() { 

    when: 
     def result = someObject.someMethod(a, b) 

    then: 
     result == expected 

    where: 
     a   | b    || expected 
     null  | null   || false 
     ""   | ""   || false 
     "test"  | "foo"   || true 
} 

ここでの主な目的は、テストロジックをできるだけ簡単に理解することです。あなたは別の組み合わせをテストする場合は、別のテストメソッドを作成することがあります。

1

Spockの観点から、私はあなたの特定の例に制限を見つけることができません。読みやすさの観点から私はSpockを使うのが最良の方法だとは思わない - 私は上記の答えに同意する。

しかし、スポックラベル(hereから)の以下の制限に注意してください。

機能メソッドが明示的に少なくとも一つの(つまりラベル)を持っている必要があります をブロックする - 実際には、の存在を明示的なブロックは、メソッドをフィーチャメソッドにするものです。ブロックはメソッドを別々のセクションに分割し、 は入れ子にできません

ので、論理的にあなたにあなたの例を考えることができます与えられた

  1. - 設定段階です。
  2. 最初の条件からのとき。
  3. 第2の条件からのとき。
  4. 第3の条件からの時。
  5. ここで、 - はデータ供給を表します。
関連する問題