Перейти к основному содержимому

@RunWith в JUnit 5

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Введение

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

В JUnit 5 аннотация @RunWith была заменена более мощной аннотацией @ExtendWith .

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

2. Запуск тестов с помощью средства запуска на основе JUnit 4

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

Давайте рассмотрим пример запуска тестов в версии Eclipse, которая поддерживает только JUnit 4.

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

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

Затем мы создадим простой тест JUnit 5:

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

Наконец, давайте добавим эту аннотацию, чтобы мы могли запустить тест:

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

Класс JUnitPlatform — это средство запуска на основе JUnit 4, которое позволяет нам запускать тесты JUnit 4 на платформе JUnit.

Имейте в виду, что JUnit 4 не поддерживает все функции новой платформы JUnit, поэтому этот раннер имеет ограниченную функциональность.

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

./867f37936defe3d23ee43fc8bd037597.jpg

3. Запуск тестов в среде JUnit 5

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

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

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

./700fcf78b2d52b8f4b4d798806992c70.jpg

4. Миграция с исполнителя на основе JUnit 4

Теперь давайте перенесем тест, использующий средство выполнения на основе JUnit 4, на JUnit 5.

Мы собираемся использовать тест Spring в качестве примера:

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

Если мы хотим перенести этот тест на JUnit 5, нам нужно заменить аннотацию @RunWith новой @ExtendWith :

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

Класс SpringExtension предоставляется Spring 5 и интегрирует Spring TestContext Framework в JUnit 5. Аннотация @ExtendWith принимает любой класс, реализующий интерфейс Extension .

5. Вывод

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

Полный исходный код этой статьи доступен на GitHub .