2017-01-05 16 views
1

Webサイトテスト用のSpock + Gebベースのテストを書いています。 Webサイトはオファーを作成するために使用され、後でさまざまなアクションが実行されます(確認、拒否、撤回)。オファーを作成するための作業シナリオを作成しました。しかし今、さまざまな組み合わせのシナリオを実装する必要があるという点に着いたとき、私はこれらの他のシナリオで「オファーを作成」を再利用できるようにしたいと考えています。残念ながら、私は例を見つけたり、それをどうやって良い方法を考えることができません。誰か私にそれについてのアイデアを教えてもらえますか?Spockテストでコードを再利用する方法

ところで、あらかじめ定義されたシーケンスでアクションを実行する必要があるので、Stepwise注釈を私の仕様に使用しています。

答えて

1

単一ページアクション:

(確認、拒否、撤回)それはあなたのコードの例を見ずに言うのは難しいですが、これを行うための一つの方法は、あなたの行動のためのメソッドを定義することです、あなたの中に簡単な方法として、 Pageクラス:

class ActionsPage extends Page { 

    static content = { 
    //Page content here 
    } 

    def confirm(){ 
    //Code to perform confirm action on the page 
    } 

    def reject(){ 
    //Code to perform reject action on the page 
    } 

その後、あなた仕様のクラスであなたが

def "Test confirm action"(){ 
    when: "we go to the actions pages" 
    to ActionsPage 

    and: "we perform a confirm action" 
    confirm() 

then: "something happens" 
//Code which checks the confirmation worked 
} 

を行うことができますゲブはGroovyのメソッドを使用していますので、これは動作します「confirm()」と呼ばれる現在のページ上のメソッドの名前を見つけるためのものが見つからず、そのコードを実行します。

複数のページアクション:

行動が複雑であり、いくつかのページに移動関与している場合、それがアクションを実行する必要があり、あなたのテストのための抽象基本クラスを作成するのが最善です:

//Not @Stepwise 
abstract class BaseActionsSpec extends Specification { 

    //Note: don't use Spock when/then blocks in these methods as they are not feature methods 
    protected void confirm(){ 
    //Code to perform multi-page action 
    } 

    protected void reject(){ 
    //Code to perform multi-page action 
    } 
} 

その後、拡張クラス:

@Stepwise 
class ConfirmActionSpec extends BaseActionsSpec{ 

     def "Test confirm action"(){ 
     when: "we go to the actions pages" 
     to ActionsPage 

     and: "we perform a confirm action" 
     confirm() //calls method in super class 

     then: "something happens" 
     //Code which checks the confirmation worked 
    } 
} 
+0

ありがとうございました。実際には、これらのアクションはそれほど簡単ではありませんが、異なるWebページでのアクションの流れから構成されています。だからこそ私はそれらを別々の仕様として実装し、後で別の仕様にそれらを組み込む可能性を持っています。拡張機能を使用して仕様に新しい機能を追加することは可能ですか? – MantasG

+0

このソリューションは単一ページのアクションにしか適していないので、私はあなたのために動作する別のソリューションを追加します – jk47

+1

ちなみに、@Stepwiseアノテーションは継承をサポートしていません。そのため、スーパークラスサブクラスの機能に関して実行される順序は定義されていません。私はあなたがここで必要とする動作(独自のコードは申し訳ありませんが)を得るためにカスタムSpock拡張を書く必要がありました。私はちょうど私の答えに示されているように、機能の外にアクションコードを移動し、ヘルパーメソッドにすることをお勧めします。 – jk47

関連する問題