Что такое AssertJ?

«Что такое AssertJ?» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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. Это мой инструмент по умолчанию для написания утверждений.