Gymterview
junior

Какие новые аннотации появились в JUnit 5?

JUnit 5 вводит ряд новых аннотаций, расширяющих возможности написания тестов:

  • @DisplayName — задаёт человекочитаемое имя теста, которое отображается в отчётах.
  • @Nested — позволяет создавать вложенные тестовые классы для логической группировки.
  • @ParameterizedTest — параметризованный тест с различными источниками данных.
  • @RepeatedTest — повторяет тест указанное число раз.
  • @Tag — помечает тесты тегами для фильтрации при запуске.
  • @Disabled — отключает тест или тестовый класс.
  • @Timeout — задаёт максимальное время выполнения теста.
  • @ExtendWith — регистрирует расширения (замена @RunWith и @Rule).
  • @TempDir — инъекция временной директории для файловых тестов.
Пример кода
import org.junit.jupiter.api.*;

@DisplayName("Тесты калькулятора")
class CalculatorTest {

    @Test
    @DisplayName("Сложение двух положительных чисел")
    void shouldAddTwoPositiveNumbers() {
        assertEquals(5, calculator.add(2, 3));
    }

    @Test
    @Disabled("Деление ещё не реализовано")
    void shouldDivide() {
        // ...
    }

    @RepeatedTest(5)
    @DisplayName("Повторяющийся тест генерации случайных чисел")
    void randomTest(RepetitionInfo info) {
        System.out.println("Повторение: " + info.getCurrentRepetition());
    }

    @Test
    @Tag("slow")
    @Timeout(value = 5, unit = TimeUnit.SECONDS)
    void longRunningTest() {
        // долгий тест
    }
}

На собеседовании: достаточно перечислить 5-6 ключевых аннотаций и описать их назначение. Частая ошибка — путать @RepeatedTest и @ParameterizedTest: первый повторяет один и тот же тест, второй запускает тест с разными данными.