spockテストData Driven Testing

2686 ワード

spockテストフレームワーク、公式ドキュメントの説明を参照:Spock is a testing and specification framework for Java and Groovyアプリケーションs.What makes it stand out from the crowd is its beautiful and highly expressive specification language. Thanks to its JUnit runner, Spock is compatible with most IDEs, build tools, and continuous integration servers. Spock is inspired from JUnit, jMock, RSpec, Groovy, Scala, Vulcans, and other fascinating life forms.
この記事は主にspockのData Driven Testingを簡単に紹介しています

データ起動テスト:


通常、同じテストコードを複数回実行し、異なる入力と予想結果を持つことが役に立ちます.

example:

  class MathSpec extends Specification {
        def "maximum of two numbers"() {
        expect:
            // exercise math method for a few different inputs
            Math.max(1, 3) == 3
            Math.max(7, 4) == 7
            Math.max(0, 0) == 0
          }
    }

この例の書き方は簡単ですが、コードとデータが混在していて、簡単に独立して変更できないという欠点があります.
  • データは、自動的に生成または外部ソースから取得することができない
  • .
  • 同じコードを複数回実行するためには、それを複製または抽出する必要がある
  • .
  • 障害が発生した場合、どの入力が障害を引き起こすかはすぐには分からない可能性があります.
  • 同じコードを複数回実行することは、単独の方法を実行するように同じ分離
  • から利益を得ることはない.
    Spockのデータ駆動テスト
    データテストドライバはこの問題を解決し,まず3つのデータ変数を導入した.
     class MathSpec extends Specification {
          def "maximum of two numbers"(int a, int b, int c) {
          expect:
          Math.max(a, b) == c
          ...
          }
      }
    

    論理的なテストを完了する部分では、where:で対応するデータブロックを保存する必要があります.
    databales
    固定データセット、
    class MathSpec extends Specification {
        def "maximum of two numbers"(int a, int b, int c) {
            expect:
                    Math.max(a, b) == c
    
            where:
                  a | b | c
                  1 | 3 | 3
                  7 | 4 | 7
                  0 | 0 | 0
           }
    }
    

    テーブルの最初の行はデータ変数を宣言し、テーブルの後続の行は、対応する値を保存します.各ローについて、feature methodは、メソッドの反復と呼ばれる1回実行される.
    Tipsデータテーブルには少なくとも2つのカラムが必要です.リストは次のように書くことができます.
    where:
      a | _ 
      1 | _ 
      7 | _ 
      0 | _
    

    Method Unrolling @Unroll
    spockの中の1つの注釈:A method annotated with @Unroll will have its iterations reported independently:@Unrollの方法はすべての反復に対して自分の独立した報告があります.

    example:

       @Unroll
       def "maximum of two numbers"() {
       ...
      }
    
    
    maximum of two numbers[0]   PASSED
    maximum of two numbers[1]   FAILED
    
    Math.max(a, b) == c
    |        |  |  |  |
    |        7  4  |  7
    42           false
    maximum of two numbers[2]   PASSED
    

    This tells us that the second iteration (with index 1) failed.
    出典:spock doc:http://spockframework.org/spock/docs/1.1/data_driven_testing.html作者のレベルが限られているので、間違いがあったら訂正してください.ありがとうございます.