Добавление пользовательских сообщений в assertJ: руководство
Быстрый ответ
import static org.assertj.core.api.Assertions.assertThat;
String actual = "apple";
assertThat(actual)
.withFailMessage("Ожидался 'orange', а получено '%s'. Кажется, органы вкуса нас ввели в заблуждение.", actual)
.isEqualTo("orange");
Используя метод .withFailMessage(), вы сможете сконфигурировать assertThat так, чтобы он акцентировал внимание на несовпадении ожидания и реальности в случае ошибки. Если где-то незамечен баг, AssertJ наглядно на это указывает.

AssertJ: максимум кастомизации с минимумом затрат
Добавление контекста с помощью метода .as()
Метод .as(), предлагаемый в AssertJ, позволяет добавить контекст к утверждению, используя форматирование строк, как в String.format. Он отлично подходит для внесения ясности в сценарии с использованием ID и UUID, которые обычно отличаются отсутствием подробностей.
assertThat(actualUuid)
.as("Проверяем UUID сессии игрока – словно ищем иголку в стоге сена.")
.isEqualTo(expectedUuid);
Контроль над сообщением об ошибке с помощью .withFailMessage()
С помощью .withFailMessage() вы можете внести свою личную ноту в сообщения о ошибках, сделав их более выразительными, чем печенье, испеченное вашей мамой.
assertThat(actualScore)
.withFailMessage("Ожидалось минимально %d, а получено всего %d. Вот это разочарование!", minScore, actualScore)
.isGreaterThanOrEqualTo(minScore);
Использование возможностей Java 11 и AssertJ
В эпоху Java 11 код выглядит стильно и лаконично:
var fruit = "apple";
assertThat(fruit)
.as("Проверяем совпадение вкусовых качеств")
.isEqualTo("orange");
Визуализация
Представьте ситуацию: фанат на концерте поднял плакат, надеясь услышать любимую песню:
_____________________________
| |
| Животрепещущий концерт |
| Хочу услышать: “Hello World” |
| Царит в воздухе: “Goodbye Moon” |
|___________________________|
Аналогия с AssertJ:
assertThat(actual).overridingErrorMessage("Ожидалось: %s, вместо этого смешано: %s. Словно болеешь за неправильного исполнителя.", "Hello World", actual)
.isEqualTo("Hello World");
Теперь отладочная информация настолько понятна, что фрагмент дебага можно не упустить и на пицца-вечеринке.
Различные методы для максимально эффективного использования
Выбор подходящего метода в зависимости от ситуации
.as() или .withFailMessage()? Ваш выбор должен базироваться на контексте. .as() подойдет для сохранения идентичности утверждения с добавлением к нему особенностей. .withFailMessage() будет полезным, если требуется заменить стандартное сообщение на уникальное с определенными деталями.
Освоение сложных утверждений
Метод .overridingErrorMessage() позволяет очень сильно изменить сообщение об ошибке, заменив стандартный текст на собственное предложение.
Погружение в детали AssertJ
Детальное изучение AssertJ покажет, что .as() — часть интерфейса Descriptable, реализованного в AbstractAssert. А .withFailMessage() находится в клиенте AbstractAssert.


