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.