Что такое AssertJ?

«Что такое AssertJ?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

AssertJ — это современная библиотека fluent assertions для Java, предназначенная для написания читаемых, выразительных и легко поддерживаемых проверок в тестах. Она предоставляет богатый набор утверждений через цепочку методов (fluent interface).

Основные преимущества перед стандартными assert или JUnit assertions:

  1. Fluent-интерфейс: Цепочка методов читается как предложение на естественном языке.
  2. Богатый набор ассертов: Специализированные проверки для коллекций, строк, Optional, дат, исключений, кастомных типов и т.д.
  3. Понятные сообщения об ошибках: При падении теста выводится детальная и информативная диагностика.
  4. Расширяемость: Возможность создания собственных, предметно-ориентированных ассертов.

Примеры использования:

import static org.assertj.core.api.Assertions.*;

// Проверка строк
assertThat("Hello, World!")
    .startsWith("Hello")
    .contains("World")
    .doesNotContain("Error");

// Проверка коллекций
List<String> names = List.of("John", "Jane", "Bob");
assertThat(names)
    .hasSize(3)
    .containsExactlyInAnyOrder("Bob", "Jane", "John")
    .allMatch(name -> name.length() > 2);

// Проверка исключений
assertThatThrownBy(() -> { throw new IllegalArgumentException("Wrong argument"); })
    .isInstanceOf(IllegalArgumentException.class)
    .hasMessageContaining("argument");

AssertJ интегрируется с основными фреймворками тестирования (JUnit, TestNG) и является стандартом де-факто для написания утверждений в Java-проектах.