Ответ
AssertJ — это современная библиотека утверждений (assertions) для Java, предоставляющая богатый, типобезопасный Fluent API для написания читаемых и выразительных проверок в unit- и интеграционных тестах. Я использую её в связке с JUnit 5 или TestNG, так как она делает код тестов гораздо понятнее, а сообщения об ошибках — информативнее.
Ключевые преимущества перед стандартными assert или Hamcrest:
- Fluent-цепочки: Позволяют строить сложные проверки в стиле "предметно-ориентированного языка" (DSL).
- Потрясающие сообщения об ошибках: При падении AssertJ сразу показывает, что именно пошло не так, экономя время на отладку.
- Огромный набор утверждений: Поддержка коллекций, строк, чисел, дат, исключений, Optional, потоков Java 8 и кастомных объектов.
Практические примеры из моих тестов:
import static org.assertj.core.api.Assertions.*;
// Проверка коллекции
assertThat(userRepository.findAll())
.hasSize(5)
.extracting(User::getEmail)
.contains("admin@example.com", "user@example.com")
.doesNotContainNull();
// Проверка строки с регулярным выражением
assertThat(errorMessage)
.startsWith("Validation failed")
.containsPattern("field.*required");
// Проверка исключения
assertThatThrownBy(() -> service.process(null))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("must not be null");
// Проверка сложного объекта
assertThat(apiResponse)
.extracting("status", "data.id", "data.name")
.containsExactly(200, 42, "Test Item");
Для проектов на Spring Boot AssertJ часто подключается автоматически через spring-boot-starter-test. Это мой инструмент по умолчанию для написания утверждений.