Аннотации JUnit 5
Структура JUnit 5
JUnit 5 (также известный как Jupiter) предоставляет богатый набор аннотаций для управления тестами. Каждая из аннотаций служит определенной цели — от настройки окружения до группировки и выполнения тестов.
Состоит из следующих модулей:
JUnit Platform: Основная платформа для запуска тестов.
JUnit Jupiter: Новый API для написания тестов.
JUnit Vintage: Обеспечивает совместимость с JUnit 4.
Аннотации для организации тестов
@Test
Используется для обозначения метода как тестового.
Этот метод должен быть public или default.
Пример:
@DisplayName
Устанавливает читаемое имя для теста, которое будет отображаться в отчетах.
Пример:
@Disabled
Отключает тест, чтобы он не выполнялся.
Можно указать причину отключения.
Пример:
Аннотации для управления жизненным циклом тестов
@BeforeEach
Выполняется перед каждым тестом.
Используется для подготовки окружения.
Пример:
@AfterEach
Выполняется после каждого теста.
Используется для очистки ресурсов.
Пример:
@BeforeAll
Выполняется один раз перед всеми тестами в классе.
Метод должен быть static.
Пример:
@AfterAll
Выполняется один раз после всех тестов в классе.
Метод должен быть static.
Пример:
#Java #Training #Spring #Testing #JUnit_5
Структура JUnit 5
JUnit 5 (также известный как Jupiter) предоставляет богатый набор аннотаций для управления тестами. Каждая из аннотаций служит определенной цели — от настройки окружения до группировки и выполнения тестов.
Состоит из следующих модулей:
JUnit Platform: Основная платформа для запуска тестов.
JUnit Jupiter: Новый API для написания тестов.
JUnit Vintage: Обеспечивает совместимость с JUnit 4.
Аннотации для организации тестов
@Test
Используется для обозначения метода как тестового.
Этот метод должен быть public или default.
Пример:
@Test
void testAddition() {
Assertions.assertEquals(5, 2 + 3);
}
@DisplayName
Устанавливает читаемое имя для теста, которое будет отображаться в отчетах.
Пример:
@Test
@DisplayName("Тест сложения двух чисел")
void testAddition() {
Assertions.assertEquals(5, 2 + 3);
}
@Disabled
Отключает тест, чтобы он не выполнялся.
Можно указать причину отключения.
Пример:
@Test
@Disabled("Тест временно отключен из-за изменений в логике")
void testDisabled() {
Assertions.fail("Этот тест не должен выполняться");
}
Аннотации для управления жизненным циклом тестов
@BeforeEach
Выполняется перед каждым тестом.
Используется для подготовки окружения.
Пример:
@BeforeEach
void setup() {
System.out.println("Подготовка перед тестом");
}
@AfterEach
Выполняется после каждого теста.
Используется для очистки ресурсов.
Пример:
@AfterEach
void cleanup() {
System.out.println("Очистка после теста");
}
@BeforeAll
Выполняется один раз перед всеми тестами в классе.
Метод должен быть static.
Пример:
@BeforeAll
static void globalSetup() {
System.out.println("Настройка перед всеми тестами");
}
@AfterAll
Выполняется один раз после всех тестов в классе.
Метод должен быть static.
Пример:
@AfterAll
static void globalCleanup() {
System.out.println("Очистка после всех тестов");
}
#Java #Training #Spring #Testing #JUnit_5
Продвинутые аннотации JUnit 5
Управление параметрами и контекстами
@Nested
Позволяет группировать связанные тесты в отдельные внутренние классы.
Пример:
@ParameterizedTest
Используется для создания параметрических тестов.
Тест выполняется несколько раз с разными значениями.
Пример:
@ValueSource
Определяет набор значений для параметрических тестов.
Пример:
@CsvSource
Передает значения в виде CSV (Comma-Separated Values).
Пример:
@EnumSource
Используется для автоматического предоставления значений из перечислений (enums) в тестовые методы.
Пример:
@CsvFileSource
Загружает данные из CSV-файла.
Пример:
Работа с условиями
@EnabledOnOs / @DisabledOnOs
Включает или отключает тест на основе операционной системы.
Пример:
@EnabledIf / @DisabledIf
Условное выполнение тестов.
Тестирование исключений и времени
@Timeout
Устанавливает максимальное время выполнения теста.
Пример:
@TestFactory
Используется для создания динамических тестов.
Пример:
#Java #Training #Spring #Testing #JUnit_5
Управление параметрами и контекстами
@Nested
Позволяет группировать связанные тесты в отдельные внутренние классы.
Пример:
@Nested
class MathTests {
@Test
void testAddition() {
Assertions.assertEquals(5, 2 + 3);
}
@Test
void testSubtraction() {
Assertions.assertEquals(1, 3 - 2);
}
}
@ParameterizedTest
Используется для создания параметрических тестов.
Тест выполняется несколько раз с разными значениями.
Пример:
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testWithParameters(int value) {
Assertions.assertTrue(value > 0);
}
@ValueSource
Определяет набор значений для параметрических тестов.
Пример:
@ParameterizedTest
@ValueSource(strings = {"Hello", "JUnit", "Test"})
void testStrings(String word) {
Assertions.assertFalse(word.isEmpty());
}
@CsvSource
Передает значения в виде CSV (Comma-Separated Values).
Пример:
@ParameterizedTest
@CsvSource({"1,2,3", "2,3,5", "3,5,8"})
void testCsvSource(int a, int b, int result) {
Assertions.assertEquals(result, a + b);
}
@EnumSource
Используется для автоматического предоставления значений из перечислений (enums) в тестовые методы.
Пример:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
@ParameterizedTest
@EnumSource(Day.class) // Все значения перечисления Day
void testWithEnumSource(Day day) {
Assertions.assertNotNull(day, "Day should not be null");
}
@CsvFileSource
Загружает данные из CSV-файла.
Пример:
@ParameterizedTest
@CsvFileSource(resources = "/data.csv", numLinesToSkip = 1)
void testCsvFileSource(int a, int b, int result) {
Assertions.assertEquals(result, a + b);
}
Работа с условиями
@EnabledOnOs / @DisabledOnOs
Включает или отключает тест на основе операционной системы.
Пример:
@Test
@EnabledOnOs(OS.WINDOWS)
void testWindowsOnly() {
Assertions.assertTrue(System.getProperty("os.name").contains("Windows"));
}
@EnabledIf / @DisabledIf
Условное выполнение тестов.
Тестирование исключений и времени
@Timeout
Устанавливает максимальное время выполнения теста.
Пример:
@Test
@Timeout(5) // Тест завершится с ошибкой, если выполнится дольше 5 секунд
void testTimeout() {
Thread.sleep(3000);
}
@TestFactory
Используется для создания динамических тестов.
Пример:
@TestFactory
Collection<DynamicTest> dynamicTests() {
return Arrays.asList(
DynamicTest.dynamicTest("1st test", () -> Assertions.assertTrue(true)),
DynamicTest.dynamicTest("2nd test", () -> Assertions.assertEquals(4, 2 * 2))
);
}
#Java #Training #Spring #Testing #JUnit_5