Зарегистрируйтесь, чтобы продолжить обучение

Библиотека AssertJ Java: Автоматическое тестирование

Встроенный в Java механизм проверки утверждений assert обладает рядом недостатков:

  1. Вы не можете быть уверены что он сработает в любой ситуации. Если запустить программу без аргумента -enableassertions (-ea), то проверки будут игнорироваться. Поэтому полагаться на assert в полной мере нельзя.
  2. Сами проверки сильно ограничены. После ключевого слова assert может быть только либо true, либо false, а это значит что вам необходимо сначала самостоятельно подготовить данные к проверке.
  3. Результат проверки неинформативен. Вам вернётся только сообщение об ошибке с указанием номера строки и имени класса в котором произошла ошибка. Да, есть вариант передать текстовое сообщение вместе с ошибкой, но так не делают, потому что это слишком "ручной" способ, требующий больших усилий.

В результате всё это привело к тому, что ключевым словом assert практически не пользуются. Более того, далеко не все Java-программисты смогут быстро ответить почему они иногда срабатывают, а иногда нет. Однако, это был отличный переход от использования if для проверки утверждения и ручного пробрасывания ошибок, к более чистому и понятному коду.

Сегодня мы рассмотрим библиотеку AssertJ, которая позволяет гораздо проще и удобнее писать тесты, а также получать достаточно информативный вывод об ошибках. При этом внутри будет всё равно лежать тот же самый механизм, который мы рассматривали в предыдущих уроках.

AssertJ не входит в перечень стандартных библиотек, но её можно подключить к вашему проекту как любую другую стороннюю библиотеку:

dependencies {
    // Такая зависимость используется только для тестирования
    testImplementation("org.assertj:assertj-core:3.22.0")
}

Точкой входа будет являться метод assertThat(), его можно импортировать вот так:

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

Написание тестов с использованием библиотеки AssertJ отличается от использования ключевого слова assert и базируется на цепочке методов. Такой подход называется fluent API. Давайте рассмотрим пример теста, написанного с использованием этой библиотеки:

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

class SomeClassTest {
    public static void testMethod() {
        var a = "Hello, world!";
        var b = "Hello, world!";

        assertThat(a).isEqualTo(b);
    }
}

Теперь тест превращается в связный текст на английском языке. Его можно прочитать следующим образом: Assert that a is equal to b, что дословно можно перевести как "Утверждаем, что a равно b". В случае если утверждение окажется ложным, то будет выброшено AssertionFailedError из библиотеки org.opentest4j.AssertionFailedError. Вывод тестов также будет сформулирован как связный текст на английском языке. Например, если в предыдущем примере мы возьмём String b = "Hello, world", то получим следующее сообщение об ошибке:

org.opentest4j.AssertionFailedError:
Expecting:
 <"Hello, world!">
to be equal to:
 <"Hello, world">
but was not.
Expected :Hello, world
Actual   :Hello, world!

В первой строке мы видим сообщение о проброшенной ошибке, а далее текст, который можно перевести как: "Ожидали, что Hello, world! будет равен "Hello, world", но это оказалось не так". Ниже отдельно вынесены ещё раз "ожидание/реальность". Такой вывод об ошибках читать уже гораздо приятнее, он является куда более информативным.


Дополнительные материалы

  1. Документация AssertJ

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»