0
0

More than 3 years have passed since last update.

Spockで「where-blocks may only contain parameterizations」のエラー

Posted at

Spockで発生したエラー

Spockでテストを実行します。

import spock.lang.*

class DataDrivenSpec extends Specification {

    def "a + b == sum"() {
        expect:
        a + b == sum

        where:
        a | b || sum
        1 | 2 || 3
        3 | 1 || 4
    }
}

ちなみに、build.gradleの設定は次のようにしました。

build.gradle
build.gradle
plugins {
    id 'groovy'
}

group 'old-spock-sample'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '1.7.5'
    // https://mvnrepository.com/artifact/org.spockframework/spock-core
    testCompile group: 'org.spockframework', name: 'spock-core', version: '0.5-groovy-1.7'
}

すると、次のようなエラーが発生しました。

where-blocks may only contain parameterizations (e.g. 'salary << [1000, 5000, 9000]; salaryk = salary / 1000')

このエラーが発生する理由は複数あるようです。珍しいパターンだと思いますが、自分の場合はSpockのバージョンが古かったためでした。

理由

Spockのリリースノートに次のように記載されています。

0.6 (released 2012-05-02)

(中略)

Improved Data Table Syntax

Table cells can now be separated with double pipes. This can be used to visually set apart expected outputs from provided inputs:

...
where:
a | b || sum
1 | 2 || 3
3 | 1 || 4

Spockではパラメータ化テストの期待値を||の後ろに書くのはSpockの0.6で追加された機能なのでバージョンによっては使えないようです。(現在(2020年5月)の最新バージョンは1.3です)

解決としては単純に|||にすれば実行できます。

もしくは、Spockのバージョンを上げても当然解決するはずです。

当たり前のように使われている機能なのでバージョンによって使えないことがあるという発想がなかったのと個人的に原因がエラーメッセージからすぐにはわからず苦戦しました。

とても古いバージョンのSpockを使う際はご注意ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0