Gradle2.11でJavaソフトウェアモデルに対してJUnitによるテストがサポートされたので試してみました。
基本
ディレクトリー構成は以下のとおりです。
root └─src ├─data │ └─java ├─data.test │ └─java ├─exceptions │ └─java └─functions └─java
使用するJavaのバージョンはJava8、JUnitのバージョンは4.12です。また、各ライブラリーは次のような機能を提供しています。
exceptions
- 例外クラスを提供。functions
- 関数型インターフェースを提供。exceptions
ライブラリーに依存。data
- データ型を提供。functions
ライブラリーに依存。data.test
-data
ライブラリーのテスト。
このようなJavaソフトウェアモデルのビルドファイルは次のようになります。
plugins { id 'jvm-component' id 'java-lang' //JavaソフトウェアモデルにてJUnitを利用するためのプラグイン id 'junit-test-suite' } repositories { jcenter() } model { testSuites { //data.test ディレクトリーにテストを配置するためにシングルクォートで囲む 'data.test'(JUnitTestSuiteSpec) { //JUnitのバージョン指定 jUnitVersion '4.12' //テスト対象のライブラリーを指定 testing $.components.data } } components { exceptions(JvmLibrarySpec) { targetPlatform 'java8' } functions(JvmLibrarySpec) { targetPlatform 'java8' api { exports 'com.sample.func.api' dependencies { library 'exceptions' } } } data(JvmLibrarySpec) { targetPlatform 'java8' api { exports 'com.sample.data.api' dependencies { library 'functions' } } } } }
tasks
タスクを実行してタスクの一覧を見てみます。
$ gradle tasks …前略… Build tasks ----------- assemble - Assembles the outputs of this project. build - Assembles and tests this project. clean - Deletes the build directory. data.testDataJarBinary - Assembles Test suite 'data.test:dataJarBinary'. dataJar - Assembles Jar 'data:jar'. exceptionsJar - Assembles Jar 'exceptions:jar'. functionsJar - Assembles Jar 'functions:jar'. …中略… Verification tasks ------------------ check - Runs all checks. data.testDataJarBinaryTest - Runs test suite 'data.test:dataJarBinary'. …以下略…
data.testDataJarBinary
というタスクがテストのコンパイルで、data.testDataJarBinaryTest
というタスクがテストタスクです。
ではdata.testDataJarBinaryTest
タスクを実行してみます。
$ gradle data.testDataJarBinaryTest :compileExceptionsJarExceptionsJava :exceptionsApiJar :compileFunctionsJarFunctionsJava :functionsApiJar :compileDataJarDataJava :compileData.testDataJarBinaryData.testJava :createExceptionsJar :createFunctionsJar :data.testDataJarBinaryTest BUILD SUCCESSFUL Total time: 13.984 secs
テストのレポートはbuild/reports/data.test/dataJar/tests
ディレクトリーに出力されます。なお、レポートの内容はGradleでお馴染みのものです。また、JUnitのxmlファイルはbuild/test-results/data.test/dataJar
ディレクトリーの下に出力されます。
テスト対象のdata
ライブラリーはjarファイルが作成されていませんし、data.test
の方もjarファイルは作成されません。
JenkinsでGradleを利用する場合は大抵build
タスクを実行すると思いますので、build
もやってみましょう。
$ gradle clean build :clean :compileExceptionsJarExceptionsJava :exceptionsApiJar :compileFunctionsJarFunctionsJava :functionsApiJar :compileDataJarDataJava :createDataJar :dataApiJar :dataJar :createExceptionsJar :exceptionsJar :createFunctionsJar :functionsJar :assemble :compileData.testDataJarBinaryData.testJava :data.testDataJarBinaryTest :check :build BUILD SUCCESSFUL Total time: 5.025 secs
build
タスクでdata.testDataJarBinaryTest
タスクが実行されているのがわかります。
応用
応用というほどではありませんが、今回はdata
ライブラリーに対してテストを実行しましたが、次のようにビルドファイルを用意して、src/funcsionsTests/java
以下のディレクトリーにテストを記述することで、functions
ライブラリーに対するテストも行えるようになります。
model { testSuites { 'data.test'(JUnitTestSuiteSpec) { jUnitVersion '4.12' testing $.components.data } functionsTests(JUnitTestSuiteSpec) { jUnitVersion '4.12' testing $.components.functions } } //以下略 }
結論
まあ、現状のJavaプロジェクトで問題ないわけだし、JavaソフトウェアモデルにしなくてもJUnitだけでなく、TestNGも使えるし、webプロジェクトはJavaソフトウェアモデルでは作れないし、現状のjava
プラグインでいいんじゃね?という話でした。
Gradle2.11を試すシリーズ、次回はないと思います。