Gymterview
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" вместо JUnit expected <John> but was <Jane>

На собеседовании: интервьюер может попросить переписать JUnit assert на AssertJ. Важно показать знание assertThat(), extracting(), assertThatThrownBy(). Частая ошибка – не знать про SoftAssertions и писать assertThat(expected) вместо assertThat(actual).