JavaでBehavior Driven Developmentをするためのフレームワーク、つまり、機械に読める仕様書を書くためのフレームワークの1つであるSpockをeclipse上で試す。ついでにGradleも試す。
Eclipseの設定
SpockはGroovyを使うので、EclipseでGroovyを使えるように設定します。新しめのEclipse用のプラグインは公式のマーケットプレイスにないので、
Home · groovy/groovy-eclipse Wiki · GitHub
にあるURL(Eclipse Marsの場合はhttp://dist.springsource.org/snapshot/GRECLIPSE/e4.5/)からプラグインをインストールする。
Help -> Install New Software
でwork with:にgroovy-eclipseのリポジトリのURLを追加して、Groovy-Eclipseプラグインをインストールする。
Gradleプロジェクトの作成
Gradleでプロジェクトを作ってみる。
File -> New -> Gradle Project
で言われるがままに設定していけば出来上がる。
build.gradleを以下のように設定する。*1
apply plugin: 'java' apply plugin: 'groovy' repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.3.11' testCompile 'org.spockframework:spock-core:1.0-groovy-2.3' }
Mavenのpom.xmlより設定ファイルがシンプルで良いですね。
プロジェクトを右クリック -> Gradle -> Refresh Gradle Project
で設定が読み込まれるよう。
テスト対象
テスト対象のJavaのクラスは以下。
package org.example.spocktest; public class Calculator { public int add(int a, int b) { return a + b; } }
テストの記述
src/test/groovyというディレクトリを作成して、src/test/groovyをSource Pathに加える。
GroovyでCalculatorクラスの仕様を記述する。例えば以下のような仕様が書ける。
package org.example.spocktest import spock.lang.Specification import spock.lang.Unroll class CalculatorSpec extends Specification { @Unroll def add() { given: def calc = new Calculator() when: def result = calc.add(a, b) then: result == expected where: a | b | expected 1 | 1 | 2 0 | 0 | 0 1 | 0 | 1 0 | 1 | 1 } }
JUnitと同じようにテスト出来る。whereで指定する組み合わせは、PICTを用いて機械的に生成したい。
感想と今後調べること
Spockは、Eclipse, Gradle, 今回は試していないがMavenといったJavaの標準的なツールとの連携もよく出来ている印象だ。 また、可読性が高い点が非常によい。
JUnitで世の中回っているので、併用する形になると思うが、Spockを使う場面とJUnitを使う場面をどう分けるかが難しいところ。
また、Coverageを算出する方法も調べたい。全てのBehaviorを記述してCoverageが100%にならない場合は、余計なコードが存在するということが分かる。
他に気になる点として、仕様変更に対して柔軟かどうかというのも検討する必要がありそうだ。