Добавление пользовательских сообщений в 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
.