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
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を使う際はご注意ください。