Преимущества Hamcrest и assertThat() над assertXXX() в Java

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

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

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

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

Рассмотрим примеры:

Java
Скопировать код
// Стандартный assert в JUnit 
assertEquals(expected, actual);

// assert с использованием Hamcrest
assertThat(actual, is(expected));

Тесты с использованием Hamcrest становятся выразительными и интуитивно понятными, что позитивно влияет на их читабельность и понимание кода в целом.

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

Как именно обрабатывать ошибки

Сопоставители Hamcrest отлично справляются с задачей обработки ошибок. Они не просто фиксируют провал теста, а подсвечивают несоответствия.

Java
Скопировать код
// Сообщение об ошибке через JUnit assert
assertEquals(array1, array2); // Сообщает: "массивы не равны"

// Сообщение об ошибке через Hamcrest assert
assertThat(array2, is(array1)); // Указывает на конкретные различия и их позиции

Каждая ошибка становится возможностью для уточнения работы кода.

Правильная настройка под ваш проект

Hamcrest дает возможность создать пользовательские сопоставители, адаптированные под конкретику вашего проекта. Это повышает точность и надежность тестов.

Java
Скопировать код
// Сопоставитель, созданный для конкретных бизнес-требований
assertThat(payment, hasProperty("status", equalTo("SUCCESS")));

Такой код однократно создается, но активно используется, образуя набор четких и понятных тестовых сценариев.

Читайте код, как художественную литературу

Синтаксис assertThat() строится по типу утверждения на естественном языке: подлежащее в начале, затем идет сказуемое (assertThat) и на конце дополнение (сопоставитель).

Java
Скопировать код
// Это больше похоже на стихотворение, чем на тест.
assertThat("место в театре", is(comfortable()));

Благодаря этому, утверждения становятся более изящными и понятными.

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

Сравним сопоставители Hamcrest и assertThat() с обычными методами assertXXX():

Markdown
Скопировать код
| Инструмент              | Гибкость                  | Точность              |
| ----------------------- | ------------------------- | --------------------- |
| assertThat() + Hamcrest | 🛠️📐 (Швейцарский нож)    | 🎯 (Высокая точность)  |
| assertXXX() методы      | 🔧 (Простой гаечный ключ) | 📏 (Линейка)           |

Метод assertThat() и сопоставители Hamcrest работают как швейцарский нож 🔪🥄, сочетая в себе универсальность и изящество:

Markdown
Скопировать код
- Они **чистят**, **режут** и **измельчают** код ваших тестов.
- С ними работа над кодом смоится организацией пространства в ресторане Мишлен.

Методы assertXXX() больше похожи на обычные кухонные ножи 🍴:

Markdown
Скопировать код
- Они исполняют свои функции, но без **гибкости** и **ловкости** швейцарского ножа.

🛠️🍴 Оптимизируйте свой тестовый набор, приспособив его для решения специфических задач!

Внедрение уверенности в тесты

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

Java
Скопировать код
// Это похоже на сэндвич с двумя начинками
assertThat(number, allOf(greaterThan(5), lessThanOrEqualTo(10)));

Такой подход позволяет проводить тестирование с высокой точностью, соответствующей критериям профессионализма.

Поиск и эффективное тестирование

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