2016-08-06 24 views
1

実行時にスポークテストを作成する可能性はありますか?私はGebSpec内でループ内にいくつかのメタメソッドを作成しようとしましたが、テストの実行中は無視されます。実行時にスポックテストを作成する

誰かが回避策を提案できますか?

ありがとうございます!

+1

あなたが何をしようとして説明できますか?私はなぜ実行時にテストを定義したいのだろうと思うことができません –

+0

異なる制約を持つ値を持つ異なるフィールドを持つフォームの複数の提出をテストしようとしています。それぞれのケースに対して別々のメソッドを作成すると、繰り返しの多いコードを含む長い原稿になります。だから、テストの実行直前に、定型ロジックをいくつかのメソッドやクロージャにカプセル化し、テストメソッドを作成する(マップを反復するなど)可能性があると考えました。 –

+3

データテーブルを使用できませんか? https://spockframework.github.io/spock/docs/1.0/data_driven_testing.html –

答えて

1

@Timに言及されているように、データテーブルは移動方法です。 データテーブルにコードを複製する必要はありません。完全に動的にすることができます。

@Unroll 
def "Check form submit params: '#login', '#pwd'. Expected - #result"(String login, String pwd, boolean result) { 
    setup: 
     // do your test 
    where: [login, pwd, result] << [ [ "user", "qwerty", true], [ "user", "1234", false] ] 
} 

where節のネストされた配列に注意してください。実際には、実行時に作成される完全動的配列である可能性があります。 @Unrollアノテーションにも注意してください。テストメソッド名がわかりやすくなります。

0

あなたはwhere節でループ/ SQLクエリを簡単に書くことができます。テストスイートは可能な限りの数だけ実行されます。

例:ループは10人の学生のための真である場合

@Unroll 
def "test suite for each student"(){ 
    given: "" 
    ....................... 
    and : "" 
    ....................... 
    then: "" 
    ........................ 
    where: "" 
    for (StudentList student : list){ 
     //operations 
     //load the values in the variables such as there numbers or ids 
} 
} 

、スイートが実行される10回

+0

機能テストでフォーム提出に必要な問題。しかし、とにかくカモメの答えは合っている。 –

関連する問題