1. 概要

このチュートリアルでは、Gradleビルドツールを使用して、新しいJUnit5プラットフォームでテストを実行します。 

古いバージョンと新しいバージョンの両方をサポートするプロジェクトを構成します。

新しいバージョンの詳細については、 A Guide to JUnit5をお読みください。 または、ビルドツールの詳細については、 Introduction toGradleを参照してください。

2. Gradleのセットアップ

まず、バージョン4.6以降のビルドツールがインストールされているかどうかを確認します。これは、バージョン4.6以降がJUnit5で動作する最も古いバージョンであるためです。

最も簡単な方法は、 gradle-vコマンドを実行することです。

$> gradle -v
------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------

また、必要に応じて、インストールの手順に従って適切なバージョンを取得できます。

すべてをインストールしたら、build.gradleファイルを使用してGradleを構成する必要があります。

ビルドツールに単体テストプラットフォームを提供することから始めることができます。

test {
    useJUnitPlatform()
}

プラットフォームを指定したので、JUnitの依存関係を指定する必要があります。 ここで、JUnit5と以前のバージョンの間に注目すべき違いが見られます。

以前のバージョンでは、必要な依存関係は1つだけでした。 ただし、JUnit 5では、APIはランタイムから分離されているため、2つの依存関係があります。

APIは、junit-jupiter-apiで明示されます。 ランタイムは、JUnit5の場合はjunit-jupiter-engine 、JUnit3または4の場合はjunit-vintage-engineです。

これら2つはtestImplementationtimeRuntimeOnlyでそれぞれ提供します。

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

3. テストの作成

最初のテストを書いてみましょう。 以前のバージョンと同じように見えます。

@Test
public void testAdd() {
    assertEquals(42, Integer.sum(19, 23));
}

これで、 gradlecleantestコマンドを実行してテストを実行できます。

JUnit 5を使用していることを確認するために、インポートを確認できます。 @TestおよびassertEqualsのインポートには、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アノテーションを使用できます。

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);
        });
    }
}

次に、実行するビルドツールを指示します。この場合、短期間の(高速な)テストを実行してみましょう。

test {
    useJUnitPlatform {
    	includeTags 'fast'
        excludeTags 'slow'
    }
}

5. 古いバージョンのサポートを有効にする

現在でも、新しいJupiterエンジンを使用してJUnit 3および4テストを作成することができます。さらに、同じプロジェクトで、たとえば移行シナリオで、それらを新しいバージョンと混在させることができます。

まず、既存のビルド構成にいくつかの依存関係を追加します。

testCompileOnly 'junit:junit:4.12' 
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.8.1'

プロジェクトにjunit-jupiter-enginejunit-vintage-engineの両方が含まれていることに注意してください。

次に、新しいクラスを作成し、前に作成したtestDivideメソッドをコピーして貼り付けます。 次に、@TestassertEqualsのインポートを追加します。 ただし、今回は、 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をJUnit5と統合しました。 さらに、バージョン3および4のサポートも追加しました。

ビルドツールは、新旧のバージョンに対して優れたサポートを提供することを確認しました。 したがって、既存のすべてのテストを変更することなく、既存のプロジェクトで新しい機能を使用できます。

完全なコード例は、GitHubプロジェクトにあります。 あなた自身のプロジェクトの出発点としてそれを自由に使ってください。