JUnit5 @RunWith

JUnit5 @RunWith

1. Вступление

В этой быстрой статье мы рассмотрим использование аннотации@RunWith в среде JUnit 5.

В JUnit 5the @RunWith annotation has been replaced by the more powerful @ExtendWith annotation.

Однако аннотация@RunWith по-прежнему может использоваться в JUnit5 для обеспечения обратной совместимости.

2. Запуск тестов с помощью Runner на основе JUnit4

Мы можем запускать тесты JUnit5 с любой другой старой средой JUnit, используя аннотацию@RunWith.

Давайте посмотрим на пример запуска этих тестов в версии Eclipse, которая поддерживает только JUnit4.

Во-первых, давайте создадим класс, который мы собираемся протестировать:

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, который позволяет запускать тесты JUnit4 на платформе JUnit.

Пустьkeep in mind that JUnit4 does not support all the features of the new JUnit Platform, so this runner has a limited functionality.

Если мы проверим результат теста в Eclipse, то увидим, что использовался бегун JUnit4:

junit4 test

3. Выполнение тестов в среде JUnit5

Теперь давайте запустим тот же тест в версии Eclipse, которая поддерживает JUnit5. В этом случае аннотация@RunWith нам больше не нужна, и мы можем написать тест без раннера:

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

Результат теста показывает, что теперь мы используем бегун JUnit5:

junit5 test

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 предоставляется Spring 5 и интегрирует Spring TestContext Framework в JUnit 5. Аннотация@ExtendWith принимает любой класс, реализующий интерфейсExtension.

5. Заключение

В этой краткой статье мы рассмотрели использование аннотации@RunWith в JUnit 4 во фреймворке JUnit5.

Полный исходный код примеров доступенover on GitHub.