Java プロジェクトにおいて、JUnit を使ったユニットテストコードを記述する場合は、build.gradle スクリプトに下記のように JUnit を使用する設定を行っておきます。
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.+'
}
テスト対象のプロダクトコードと、そのテストコードは、下記のようなディレクトリ構成で配置します。
package com.example;
public class Sample {
public static int add(int a, int b) {
return a + b;
}
}
package com.example;
import org.junit.Test;
import static org.junit.Assert.*;
public class SampleTest {
@Test
public void testAdd() {
assertEquals(3, Sample.add(1, 2));
}
}
ちなみに、JUnit 4.x 系では上記のようにアノテーションを使って記述しますが、JUnit 3.x までは下記のように TestCase クラスを継承する形で記述していました。後方互換性のため、JUnit 4.x を使っている場合でも、下記のように記述することができます。
package com.example;
import junit.framework.TestCase;
public class SampleTest extends TestCase {
public void testAdd() {
assertEquals(3, Sample.add(1, 2));
}
}
テストコードのビルド&実行は、test タスクにより実行することができます。
$ gradle test
:compileJava
:processResources UP-TO-DATE
:classes
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test
BUILD SUCCESSFUL
Total time: 6.226 secs
もちろん、テストに失敗すればエラーが表示されます。
$ gradle -q test
1 test completed, 1 failed
FAILURE: Build failed with an exception.
...
実行結果からも分かるように、test タスクを実行すると、テストの実行に先立って、プロダクトコードのコンパイル (classes) とテストコードのコンパイル (testClasses) が実行されます。 テストが完了すると、下記のようなディレクトリにファイルが出力されます。
Gradle は HTML 形式で見やすいレポートを出力してくれます。
build/reports/tests/index.html
をブラウザで開けば、詳細なレポートを確認できます。
test タスクを実行したときに実行されるテストは下記のようなものです。
特定のテストクラスだけを実行することもできます。 test.single というシステムプロパティで、クラス名のパターンを指定して test タスクを実行することにより、パターンに一致したテストクラスだけが実行されます。
下記の例では、クラス名が LargeTest で終わるテストクラスだけを実行しています。
$ gradle -Dtest.single=**/*LargeTest test