2016-09-24 5 views
0

私はSpockフレームワークを使用しています。私はthen:ブロックのロジックをカプセル化できるヘルパーメソッドを認識しています。私が必要とするのは、同じクラスの異なるフィーチャメソッド間で数行のコードを再利用することです。コードのこれらの行はwhen:then:ブロック、例えばが含まれている:spockフレームワークの高度なヘルパーメソッド

def "myFeatureMethod"() { 
    given: 
    ... 

    when: 
    ... 

    then: 
    ... 

    myHelperMethod 
} 

private void myHelperMethod() { 
    when: 
    ... 

    then: 
    ... 
} 

私が理解から、これはスポックと、現在は不可能です。同じ問題を解決するための回避策はありますか?

+1

ヘルパーメソッドで 'when:'、 '': ''などのブロックを持つのは意味をなさないので、フィーチャーメソッドでのみ使用してください。 –

答えて

0

まず、Spock Frameworkの各ブロックの意味を理解できるようにします。

の場合:は、確認したい状態です。

を使用すると、が得られます。ブロックと同じ結果に振る舞う必要があります。、その後は同じ条件でブロック:同じときのため

ベストプラクティスは、のいずれかを省略することです:ブロック(おそらく最初のチェックの後には関係のないものの1つを見つけることができます)。 無関係のを省略した場合、ブロックをマージすると、ブロックが残っているときに2 ブロックをマージすることができます。

もう1つの方法は、各Spockテストの最後にクリーニング方法を設けることです。 を使用

def cleanup() {}  // run after every feature method 

def cleanupSpec() {} // run after the last feature method 
  • 次のような一般的な方法を使用し

    1. :2通りの方法で行うことができる

      関連するテスト内のクリーンアップ:ブロック。クリーンアップは、保持する必要がありとき:myHelperMethod()から ブロックは、その後ながら:チェックがチェックのためにそれほど重要ではありませんする必要があります原因ブロックは省略されなければなりません。

  • 0

    を再利用しようとしている場合:ブロックは、同じことをチェックする複数の単体テストが必要なことを意味します。これは反パターンであり、維持しにくいコードにつながります。

    共通のテストコードを1つのテスト方法に集約し、同じテストロジックを異なる「例」に使用する場合は、parameterized testsを使用する必要があります。

    +0

    ユニットテストにSpockを使用するという誤った仮定をしました。そうでない場合は、e2eテストでも使用します。特定のテストステップを共有でき、テストデザインの破損とは関係がありません。 – automatictester

    関連する問題