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

@BeforeAll и @AfterAll в нестатических методах

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

1. Обзор

В этом коротком руководстве мы собираемся реализовать нестатические методы с аннотациями @BeforeAll и @AfterAll, доступными в Junit5 .

2. @BeforeAll и @AfterAll в нестатических методах

Во время модульного тестирования мы можем иногда захотеть использовать @BeforeAll и @AfterAll в нестатических методах установки и демонтажа — например, в тестовом классе @ Nested или в качестве методов интерфейса по умолчанию.

Создадим тестовый класс с методами @BeforeAll и @AfterAll как нестатическими:

public class BeforeAndAfterAnnotationsUnitTest {

String input;
Long result;

@BeforeAll
public void setup() {
input = "77";
}

@AfterAll
public void teardown() {
input = null;
result = null;
}

@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}

Если мы запустим приведенный выше код, он выдаст исключение:

org.junit.platform.commons.JUnitException:  ...

Давайте теперь посмотрим, как мы можем избежать этой ситуации.

3. Аннотация @TestInstance

Мы будем использовать аннотацию @TestInstance для настройки жизненного цикла теста. Если мы не объявим его в нашем тестовом классе, режим жизненного цикла по умолчанию будет PER_METHOD . Итак, чтобы наш тестовый класс не вызывал JUnitException, нам нужно аннотировать его с помощью @TestInstance(TestInstance. Lifecycle.PER_CLASS) .

Давайте переделаем наш тестовый класс и добавим @TestInstance(TestInstance. Lifecycle.PER_CLASS):

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class BeforeAndAfterAnnotationsUnitTest {

String input;
Long result;

@BeforeAll
public void setup() {
input = "77";
}

@AfterAll
public void teardown() {
input = null;
result = null;
}

@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}

В этом случае наш тест проходит успешно.

4. Вывод

В этой короткой статье мы узнали, как использовать @BeforeAll и @AfterAll в нестатических методах. Во-первых, мы начали с простого нестатического примера, чтобы показать, что произойдет, если мы не включим аннотацию @TestInstance . Затем мы аннотировали наш тест @TestInstance(TestInstance.Lifecycle.PER_CLASS) , чтобы предотвратить создание JUnitException .

Как всегда, реализация всех этих примеров закончена на GitHub .