JUnit 5 @Testアノテーション

1概要

この記事では、JUnitの @ Test アノテーションについて簡単に説明します。この注釈は、単体テストと回帰テストを実行するための強力なツールを提供します。

2 Mavenの設定

latestバージョンを使用するJUnit 5の場合 、Mavenの次の依存関係を追加する必要があります。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.1.0</version>
    <scope>test</scope>
</dependency>

Mavenがこの依存関係を最終ビルドに含めないようにするため、 test スコープを使用します。

surefireプラグインはまだJUnit 5を完全にはサポートしていないので、 https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.junit.platform%22も必要になります。 %20AND%20a%3A%22junit-platform-surefire-provider%22[プロバイダを追加する] 、これによりMavenにテストの場所がわかります。

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.0.2</version>
        </dependency>
    </dependencies>
</plugin>

この記事の執筆時点では、バージョン2.20.xは junit-platform-surefire-provider ** と互換性がないため、この設定ではsurefire 2.19.1を使用します。

3テスト中のメソッド

まず最初に、テストシナリオで使用する簡単な方法を作成して、 @ Test アノテーションの機能を紹介しましょう。

public boolean isNumberEven(Integer number) {
    return number % 2 == 0;
}

このメソッドは、渡された引数が偶数の場合は true を返し、それ以外の場合は false を返します。それでは、それが想定したとおりに機能するかどうかを確認しましょう。

4メソッドをテストする

この例では、2つのシナリオを具体的に確認します。

  • 偶数が与えられると、メソッドは true を返すべきです

  • 奇数が与えられると、メソッドは false を返さなければなりません

これは、実装コードがさまざまなパラメータを使用して isNumberEven メソッドを呼び出し、結果が期待どおりであることを確認することを意味します。

  • テストがそのように認識されるようにするには、 @ Test アノテーションを追加します。 クラス内に必要な数だけこれらを含めることができますが、関連するものだけをまとめることをお勧めします。また、 テストは privateであったり、 値を返してはいけません** それ以外の場合は無視されます。

これらを考慮して、テストメソッドを書きましょう。

@Test
void givenEvenNumber__whenCheckingIsNumberEven__thenTrue() {
    boolean result = bean.isNumberEven(8);

    Assertions.assertTrue(result);
}

@Test
void givenOddNumber__whenCheckingIsNumberEven__thenFalse() {
    boolean result = bean.isNumberEven(3);

    Assertions.assertFalse(result);
}

ここでMavenビルドを実行すると、 surefireプラグインは src/test/java の下に置かれたクラスのすべてのアノテーション付きメソッドを通過してそれらを実行します

もしあなたがJUnit 4から来たのであれば、このバージョンではアノテーションはいかなるパラメータも受け付けないことに注意してください。** タイムアウトやスローされた例外をチェックするには、代わりにアサーションを使用します。

@Test
void givenLowerThanTenNumber__whenCheckingIsNumberEven__thenResultUnderTenMillis() {
    Assertions.assertTimeout(Duration.ofMillis(10), () -> bean.isNumberEven(3));
}

@Test
void givenNull__whenCheckingIsNumberEven__thenNullPointerException() {
    Assertions.assertThrows(NullPointerException.class, () -> bean.isNumberEven(null));
}

5結論

このクイックチュートリアルでは、 @ Test アノテーションを使用して簡単なJUnitテストを実装して実行する方法を示しました。

JUnitフレームワークについての詳細は この投稿 にあります。これは一般的な紹介を提供します。

例で使用されているすべてのコードはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/junit-5[GitHubプロジェクト]にあります。