Добавление пользовательских сообщений в assertJ: руководство

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Java
Скопировать код
import static org.assertj.core.api.Assertions.assertThat;

String actual = "apple";
assertThat(actual)
        .withFailMessage("Ожидался 'orange', а получено '%s'. Кажется, органы вкуса нас ввели в заблуждение.", actual)
        .isEqualTo("orange");

Используя метод .withFailMessage(), вы сможете сконфигурировать assertThat так, чтобы он акцентировал внимание на несовпадении ожидания и реальности в случае ошибки. Если где-то незамечен баг, AssertJ наглядно на это указывает.

Кинга Идем в IT: пошаговый план для смены профессии

AssertJ: максимум кастомизации с минимумом затрат

Добавление контекста с помощью метода .as()

Метод .as(), предлагаемый в AssertJ, позволяет добавить контекст к утверждению, используя форматирование строк, как в String.format. Он отлично подходит для внесения ясности в сценарии с использованием ID и UUID, которые обычно отличаются отсутствием подробностей.

Java
Скопировать код
assertThat(actualUuid)
        .as("Проверяем UUID сессии игрока – словно ищем иголку в стоге сена.")
        .isEqualTo(expectedUuid);

Контроль над сообщением об ошибке с помощью .withFailMessage()

С помощью .withFailMessage() вы можете внести свою личную ноту в сообщения о ошибках, сделав их более выразительными, чем печенье, испеченное вашей мамой.

Java
Скопировать код
assertThat(actualScore)
        .withFailMessage("Ожидалось минимально %d, а получено всего %d. Вот это разочарование!", minScore, actualScore)
        .isGreaterThanOrEqualTo(minScore);

Использование возможностей Java 11 и AssertJ

В эпоху Java 11 код выглядит стильно и лаконично:

Java
Скопировать код
var fruit = "apple";
assertThat(fruit)
        .as("Проверяем совпадение вкусовых качеств") 
        .isEqualTo("orange");

Визуализация

Представьте ситуацию: фанат на концерте поднял плакат, надеясь услышать любимую песню:

Markdown
Скопировать код
_____________________________
|                           |
|  Животрепещущий концерт   |
|  Хочу услышать: “Hello World” |
|  Царит в воздухе: “Goodbye Moon” |
|___________________________|

Аналогия с AssertJ:

Java
Скопировать код
assertThat(actual).overridingErrorMessage("Ожидалось: %s, вместо этого смешано: %s. Словно болеешь за неправильного исполнителя.", "Hello World", actual)
                  .isEqualTo("Hello World");

Теперь отладочная информация настолько понятна, что фрагмент дебага можно не упустить и на пицца-вечеринке.

Различные методы для максимально эффективного использования

Выбор подходящего метода в зависимости от ситуации

.as() или .withFailMessage()? Ваш выбор должен базироваться на контексте. .as() подойдет для сохранения идентичности утверждения с добавлением к нему особенностей. .withFailMessage() будет полезным, если требуется заменить стандартное сообщение на уникальное с определенными деталями.

Освоение сложных утверждений

Метод .overridingErrorMessage() позволяет очень сильно изменить сообщение об ошибке, заменив стандартный текст на собственное предложение.

Погружение в детали AssertJ

Детальное изучение AssertJ покажет, что .as() — часть интерфейса Descriptable, реализованного в AbstractAssert. А .withFailMessage() находится в клиенте AbstractAssert.

Полезные материалы

  1. AssertJ – библиотека утверждений для Java — официальная документация AssertJ.
  2. GitHub – assertj/assertj-examples: Примеры использования утверждений AssertJ.
  3. AssertJ / Лаконичные утверждения для Java.
  4. DZone.
  5. Starter Package.
Свежие материалы