1. 序章

このクイックチュートリアルでは、JUnit5フレームワークでの@RunWithアノテーションの使用について説明します。

JUnit 5では、@RunWithアノテーションがより強力な@ExtendWithアノテーションに置き換えられました。

ただし、下位互換性のために、@RunWithアノテーションをJUnit5で引き続き使用できます。

2. JUnit4ベースのランナーを使用したテストの実行

@RunWith アノテーションを使用して、古いJUnit環境でJUnit5テストを実行できます。

JUnit4のみをサポートするEclipseバージョンでテストを実行する例を見てみましょう。

まず、テストするクラスを作成しましょう。

public class Greetings {
    public static String sayHello() {
        return "Hello";
    }  
}

次に、このプレーンなJUnit5テストを作成します。

public class GreetingsTest {
    @Test
    void whenCallingSayHello_thenReturnHello() {
        assertTrue("Hello".equals(Greetings.sayHello()));
    }
}

最後に、このアノテーションを追加して、テストを実行できるようにします。

@RunWith(JUnitPlatform.class)
public class GreetingsTest {
    // ...
}

JUnitPlatform クラスは、JUnit4ベースのランナーであり、JUnitプラットフォームでJUnit4テストを実行できます。

JUnit 4は新しいJUnitプラットフォームのすべての機能をサポートしているわけではないため、このランナーの機能は制限されていることに注意してください。

Eclipseでテストの結果を確認すると、JUnit4ランナーが使用されたことがわかります。

3. JUnit5環境でのテストの実行

次に、JUnit5をサポートするEclipseバージョンで同じテストを実行してみましょう。 この場合、 @RunWith アノテーションは不要になり、ランナーなしでテストを記述できます。

public class GreetingsTest {
    @Test
    void whenCallingSayHello_thenReturnHello() {
        assertTrue("Hello".equals(Greetings.sayHello()));
    }
}

テスト結果は、現在JUnit5ランナーを使用していることを示しています。

4. JUnit4ベースのランナーからの移行

次に、JUnit4ベースのランナーを使用するテストをJUnit5に移行しましょう。

例としてSpringテストを使用します。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}

このテストをJUnit5に移行する場合は、@RunWithアノテーションを新しい@ExtendWithに置き換える必要があります。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { SpringTestConfiguration.class })
public class GreetingsSpringTest {
    // ...
}

SpringExtensionクラスはSpring5によって提供され、SpringTestContextFrameworkをJUnit5に統合します。 @ExtendWith アノテーションは、Extensionインターフェースを実装するすべてのクラスを受け入れます。

5. 結論

この短い記事では、JUnit5フレームワークでのJUnit4の@RunWithアノテーションの使用について説明しました。

この記事の完全なソースコードは、GitHubから入手できます。