やりたい事
Android Studio 3.xで、Gradleを使っていて、マルチモジュールでJavaライブラリが含まれている。
そのJavaライブラリのテストをSpockで実装したい。
導入
Spockの導入のやり方は色々あるが、モジュールのbuild.gradleに追記していく事になるだろう。
だが、重要本記事のポイントは最後の行のdestinationDir。
apply plugin: 'groovy'
dependencies {
testCompileOnly 'org.codehaus.groovy:groovy:2.5.3'
testCompileOnly('org.spockframework:spock-core:1.2-groovy-2.5') {
exclude module: 'groovy-all'
}
}
compileTestGroovy.destinationDir = compileTestJava.destinationDir
解説
hoge.groovyでのテストクラスの左に現れる三角から実行した場合、gradleのtaksはgroovyとしてのcompile(compileTestGroovy)が走って.classは生成されるが、それはhoge/build/classes/groovy/test/
に生成される。
しかし、Android StudioにおけるTest?はJUnitとなっているようなので、hoge/build/classes/java/test/
の.classを参照している様子。
そのためにClass not found: "hogehoge" Empty test suite.
とのエラーになってテストが実行できない。
そこで、compileTestGroovy.destinationDir
をJavaと同じ.classの出力先にする。