GradleでJUnit 5を使う

1概要

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

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

新しいバージョンの詳細については、https://www.baeldung.com/junit-5[A Guide to JUnit 5]をお読みください。ビルドツールの詳細については、https://www.baeldung.com/gradle[Introduction to Gradle]を参照してください。

2 Gradleセットアップ

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

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

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

そして、必要ならば、https://gradle.org/install/[installation]の手順に従って正しいバージョンを入手することができます。

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

まず、単体テストプラットフォームをビルドツールに提供します。

test {
    useJUnitPlatform()
}

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

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

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

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

JUnit 5を使用していることを確認するために、インポートを確認します。 ** @ Test assertEquals のインポートには、__org.junit.jupiter.apiで始まるパッケージが必要です。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

最後の例では、長年使用されてきた「古い」機能を使用したテストを作成しました。 JUnit 5の新しい機能のいくつかを使った別の例を作成しましょう。

@Test
public void testDivide() {
    assertThrows(ArithmeticException.class, () -> {
        Integer.divideUnsigned(42, 0);
    });
}
  • assertThrows はJUnit5の新しいアサーションであり、古いスタイルの__ @ Test(expected = ArithmeticException.class)を置き換えます。

4 Gradle を使ったJUnit 5テストの設定

次に、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.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のサポートも追加しました。

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

完全なコード例はhttps://github.com/eugenp/tutorials/tree/master/gradle/junit5[GitHubプロジェクト]にあります。あなた自身のプロジェクトの出発点としてそれを自由に使ってください。