mavenプロジェクトでJUnitとSpockを実行する

背景
- mavenのプロジェクト
- JUnitでわずかながらテストが書かれていた
- JUnitでテストを書き続けるのは辛い
- Spockでテストを書きたい
※ gradleにspock導入経験有り
概要、やりたいこと
- 既存のJUnitを残しつつ、Spockも追加していきたい
- JUnitとSpockをひとつのコマンドで一発で実行したい(
)./mvnw test
- spockがどう素晴らしいかなどは記載しません
って話です。
未だにMavenでJUnitを使ってテストしている人に捧ぐ…
環境
- maven3
- java8
- groovy2.5
手順
流れ
- とりあえず、spockを追加してテストを書く
- mavenでgroovyファイルをコンパイル対象にする
- mavenで*Spec.ファイルをテスト実行対象にする
とりあえず、spockを追加してテストを書く
-
pom.xmlに依存関係を追加
org.spockframework spock-core 1.3-groovy-2.5 test -
テストを書く
package jp.co.trech import spock.lang.* class AppSpec extends Specification { def 'サンプルテスト'() { expect: Math.max(1, 2) != 2 // テスト実行されているか確認したいので、あえて落ちるテストにしておく } }
-
テスト実行してみる
./mvnw test → BUILD SUCCESS
→ compileされたファイルが生成されない & Spockも実行されていない
mavenでgroovyファイルをコンパイル対象にする
-
gradleではspockを依存関係に入れるだけでgroovyファイルもコンパイルしてくれていたが、mavenではコンパイルしてくれなかったので以下を追加
※ maven-compiler-pluginは3.6.2以上じゃないと動かない模様(Groovy Eclipse Maven plugin参照)maven-compiler-plugin 3.8.1 1.8 1.8 UTF-8 groovy-eclipse-compiler true config.groovy lombok.launch.Agent true org.codehaus.groovy groovy-eclipse-compiler 3.3.0-01 org.codehaus.groovy groovy-eclipse-batch 2.5.6-01 org.projectlombok lombok 1.16.20 -
テスト実行してみる
./mvnw test → BUILD SUCCESS
→ compileされたファイルが生成された!
→ だがSpockは実行されない
mavenで*Spec.ファイルをテスト実行対象にする
-
上記maven-compiler-pluginの次に以下を追加
maven-surefire-plugin 3.0.0-M1 true **/*Test.* **/*Spec.* org.apache.maven.surefire surefire-junit47 3.0.0-M1 maven-surefire-pluginのversionはjavaのversionによるので、Maven Surefire Plugin参照
-
テスト実行してみる
./mvnw test → BUILD FAILURE
→ compileされたファイルが生成された!
→ Spockも実行されたのでテスト落ちた!
→ Spockのテストを修正してテストが通れば完了!
結論
- gradleには簡単にSpock入れられたのにmavenにSpock追加するのは大変
- おとなしくgradle使いましょう
参考URL
Compiling Groovy
maven-surefire-plugin Using JUnit
groovy/groovy-eclipse Groovy Eclipse Maven plugin