junior
Что такое AssertJ?
AssertJ – библиотека fluent assertions для Java, предоставляющая читаемый chainable API вместо стандартных assertEquals/assertTrue. Входит в spring-boot-starter-test.
Сравнение с JUnit assertions
| JUnit 5 | AssertJ |
|---|---|
assertEquals("John", name) |
assertThat(name).isEqualTo("John") |
assertTrue(list.contains("item")) |
assertThat(list).contains("item") |
assertNotNull(result) |
assertThat(result).isNotNull() |
Преимущество AssertJ – IDE автоподсказки после assertThat(), цепочки проверок, лучшие сообщения об ошибках.
Проверка коллекций
Пример
assertThat(users)
.hasSize(3)
.extracting(User::getName)
.containsExactly("Alice", "Bob", "Charlie");
assertThat(users)
.filteredOn(User::isActive)
.extracting(User::getEmail)
.allMatch(email -> email.contains("@"));
Проверка исключений
Пример
assertThatThrownBy(() -> service.findById(-1L))
.isInstanceOf(NotFoundException.class)
.hasMessageContaining("not found")
.hasFieldOrPropertyWithValue("id", -1L);
assertThatCode(() -> service.findById(1L))
.doesNotThrowAnyException();
Soft Assertions
Все проверки выполняются, ошибки собираются и показываются вместе:
Пример
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(user.getName()).isEqualTo("John");
softly.assertThat(user.getEmail()).isEqualTo("john@mail.com");
softly.assertThat(user.getId()).isNotNull();
});
Ключевые принципы
assertThat(actual)– точка входа; IDE автоматически подсказывает доступные проверкиextracting()– извлечение полей из объектов/коллекций для цепочки проверокSoftAssertions– аналогassertAllиз JUnit, но с fluent API
Частые ошибки
- Путать порядок аргументов –
assertThat(actual), неassertThat(expected) - Импортировать JUnit assertEquals вместе с AssertJ – конфликт; выберите один стиль
Как используется в 2026
- AssertJ – стандарт де-факто; Spring Boot включает в
spring-boot-starter-test - Лучшие сообщения об ошибках:
expected: "John" but was: "Jane"вместо JUnitexpected <John> but was <Jane>
На собеседовании: интервьюер может попросить переписать JUnit assert на AssertJ. Важно показать знание
assertThat(),extracting(),assertThatThrownBy(). Частая ошибка – не знать проSoftAssertionsи писатьassertThat(expected)вместоassertThat(actual).