Gymterview
junior

Какие методы утверждений (assertions) предоставляет JUnit 5?

JUnit 5 значительно расширил набор утверждений по сравнению с JUnit 4, добавив assertAll, assertThrows и assertTimeout.

assertAll — группировка проверок

Группирует несколько проверок и выполняет их все, даже если какая-то из них упадёт. Это позволяет увидеть все ошибки сразу:

Пример
@Test
void testUserProperties() {
    User user = userService.findById(1L);

    assertAll("Проверка свойств пользователя",
        () -> assertEquals("Иван", user.getFirstName()),
        () -> assertEquals("Иванов", user.getLastName()),
        () -> assertEquals("ivan@example.com", user.getEmail()),
        () -> assertNotNull(user.getCreatedAt())
    );
}

assertThrows — проверка исключений

Проверяет, что выполнение кода бросает ожидаемое исключение (замена @Test(expected = ...) из JUnit 4):

Пример
@Test
void shouldThrowExceptionWhenDivideByZero() {
    Calculator calculator = new Calculator();

    ArithmeticException exception = assertThrows(
        ArithmeticException.class,
        () -> calculator.divide(10, 0)
    );

    assertEquals("/ by zero", exception.getMessage());
}

assertTimeout — проверка времени выполнения

Проверяет, что операция выполняется за отведённое время. В отличие от assertTimeoutPreemptively, не прерывает выполнение:

Пример
@Test
void shouldCompleteInTime() {
    assertTimeout(Duration.ofSeconds(2), () -> {
        service.processData();
    });
}

@Test
void shouldCompletePreemptively() {
    // прервёт выполнение, если превышен лимит
    assertTimeoutPreemptively(Duration.ofMillis(500), () -> {
        Thread.sleep(100);
        return "результат";
    });
}

Другие полезные assertions

Пример кода
@Test
void otherAssertions() {
    // Проверка на null
    assertNotNull(object);
    assertNull(nullObject);

    // Проверка истинности/ложности
    assertTrue(condition);
    assertFalse(condition);

    // Проверка ссылочного равенства
    assertSame(expected, actual);
    assertNotSame(expected, actual);

    // Проверка с итерируемыми коллекциями
    assertIterableEquals(List.of(1, 2, 3), actualList);

    // Проверка строк на совпадение строки
    assertLinesMatch(
        List.of("первая строка", "\\d+ элементов", "последняя строка"),
        actualLines
    );
}

На собеседовании: ключевые методы для упоминания — assertAll, assertThrows, assertTimeout. Частая ошибка — не знать про assertAll и описывать только базовые assertEquals/assertTrue.