GradleでJUnit 5を使用する
1. 概要
このチュートリアルでは、Gradleビルドツールを使用して、新しいJUnit5プラットフォームでテストを実行します。
古いバージョンと新しいバージョンの両方をサポートするプロジェクトを構成します。
新しいバージョンの詳細については、A Guide to JUnit 5をお読みください。 または、ビルドツールに関する詳細情報のIntroduction to Gradle。
2. Gradleセットアップ
まず、バージョン4.6以降のビルドツールがインストールされているかどうかを確認します。これは、バージョン4.6以降がJUnit5で動作する最も古いバージョンであるためです。
最も簡単な方法は、gradle -vコマンドを実行することです。
$> gradle -v
------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------
また、必要に応じて、installationの手順に従って適切なバージョンを取得できます。
すべてをインストールしたら、build.gradleファイルを使用してGradleを構成する必要があります。
ビルドツールに単体テストプラットフォームを提供することから開始できます。
test {
useJUnitPlatform()
}
プラットフォームを指定したので、JUnitの依存関係を指定する必要があります。 ここで、JUnit 5と以前のバージョンの間に注目すべき違いが見られます。
以前のバージョンでは、必要な依存関係は1つだけでした。 In JUnit 5, though, the API is separated from the runtime, meaning two dependencies.
APIは、junit-jupiter-apiで明示されます。 ランタイムは、JUnit 5の場合はjunit-jupiter-engine、JUnit 3または4の場合はjunit-vintage-engineです。
これら2つをそれぞれtestImplementation とtimeRuntimeOnlyで提供します。
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
}
3. テストの作成
最初のテストを書いてみましょう。 以前のバージョンと同じように見えます。
@Test
public void testAdd() {
assertEquals(42, Integer.sum(19, 23));
}
さて、we can run the test by executing the gradle clean test command。
JUnit 5を使用していることを確認するために、インポートを確認できます。 The imports for @Test and assertEquals should have a package starting with org.junit.jupiter.api:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
そのため、最後の例では、長年にわたって機能している「古い」機能を備えたテストを作成しました。 次に、JUnit5の新機能のいくつかを使用する別の例を作成します。
@Test
public void testDivide() {
assertThrows(ArithmeticException.class, () -> {
Integer.divideUnsigned(42, 0);
});
}
assertThrowsは、@Test(expected=ArithmeticException.class).の古いスタイルを置き換えるJUnit5の新しいアサーションです。
4. Gradleを使用したJUnit5テストの構成
次に、GradleとJUnit5のより深い統合について説明します。
スイートには、長期実行と短期実行の2種類のテストがあるとします。 JUnit 5@Tag annotationを使用できます。
public class CalculatorJUnit5Test {
@Tag("slow")
@Test
public void testAddMaxInteger() {
assertEquals(2147483646, Integer.sum(2147183646, 300000));
}
@Tag("fast")
@Test
public void testDivide() {
assertThrows(ArithmeticException.class, () -> {
Integer.divideUnsigned(42, 0);
});
}
}
Then, we tell the build tool which ones to execute.この場合、短期間の(高速)テストを実行してみましょう。
test {
useJUnitPlatform {
includeTags 'fast'
excludeTags 'slow'
}
}
5. 古いバージョンのサポートを有効にする
Now, it’s still possible to create JUnit 3 and 4 tests with the new Jupiter engine.さらに、同じプロジェクトで、たとえば移行シナリオで、それらを新しいバージョンと混在させることができます。
まず、既存のビルド構成にいくつかの依存関係を追加します。
testCompileOnly 'junit:junit:4.12'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.3.1'
プロジェクトにjunit-jupiter-engine とjunit-vintage-engine.の両方が含まれていることに注意してください
次に、新しいクラスを作成し、前に作成したtestDivideメソッドをコピーして貼り付けます。 次に、@TestとassertEqualsのインポートを追加します。 ただし、今回は、org.junit:で始まる古いバージョン4パッケージを使用するようにします。
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorJUnit4Test {
@Test
public void testAdd() {
assertEquals(42, Integer.sum(19, 23));
}
}
6. 結論
このチュートリアルでは、GradleとJUnit 5を統合しました。 さらに、バージョン3および4のサポートも追加しました。
ビルドツールは、新旧のバージョンに対して優れたサポートを提供することを確認しました。 したがって、既存のテストをすべて変更することなく、既存のプロジェクトで新しい機能を使用できます。
完全なコード例は、GitHub projectにあります。 自分のプロジェクトの出発点として自由に使用してください。