Проверка на пустоту списка в Hamcrest: альтернатива isEmpty()

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

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

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

Для проверки на непустоту списка с помощью Hamcrest можно использовать матчеры hasItem или hasItems:

Java
Скопировать код
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

List<String> myList = Arrays.asList("item1");
assertThat(myList, hasItem(anything())); // Подтверждаем наличие хотя бы одного элемента в myList.

Этот код проверяет, что в списке myList содержится хотя бы один элемент.

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

Способы проверки на непустоту списка

Прямой подход к проверке непустоты

Используйте комбинацию is, not и empty для ясной и целенаправленной проверки:

Java
Скопировать код
assertThat(myList, is(not(empty())));

Важно правильно проимпортировать статические методы:

Java
Скопировать код
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not;

Совместимость с ранними версиями Hamcrest

При работе с ранними версиями Hamcrest (например, 1.2) приведение типов становится необходимым:

Java
Скопировать код
assertThat((Collection)myList, is(not(empty())));

Проверка размера списка

Для подтверждения, что список содержит больше элементов, чем указанное число, используйте hasSize в сочетании с greaterThan:

Java
Скопировать код
assertThat(myList, hasSize(greaterThan(0))); // Хотим, чтобы размер списка был больше нуля.

Не забудьте о статическом импорте для greaterThan:

Java
Скопировать код
import static org.hamcrest.number.OrderingComparison.greaterThan;

Альтернатива Hamcrest: подход на чистой Java

Непустоту списка можно проверить без Hamcrest, используя assertEquals для сравнения false с результатом myList.isEmpty():

Java
Скопировать код
assertEquals(false, myList.isEmpty()); // Использование метода 'equals'.

Расширенные техники использования Hamcrest с списками

Утверждение конкретных элементов

Чтобы подтвердить наличие определённых элементов в списке, применяйте hasItems:

Java
Скопировать код
assertThat(myList, hasItems("item1", "item2")); // Проверяем наличие элементов "item1" и "item2".

Создание кастомных матчеров

Для выполнения сложных проверок можно создать свой матчер:

Java
Скопировать код
assertThat(myList, new CustomMatcher<List<String>>() {
  // Здесь ваша логика проверки
});

Проверка порядка элементов

Для проверки последовательности элементов используйте contains или containsInAnyOrder:

Java
Скопировать код
assertThat(myList, contains("item1", "item2")); // Проверяем, что элементы расположены в определённом порядке.
assertThat(myList, containsInAnyOrder("item2", "item1")); // Порядок элементов может быть любым.

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

Пример иллюстрации процесса проверки списка на непустоту:

Markdown
Скопировать код
Содержимое списка: [🍏, 🍋, 🍇]
Проверка Hamcrest: is(not(empty()))
Статус списка: ✅  // Список не пустой, можно начать обработку!

А если список пуст:

Markdown
Скопировать код
Содержимое списка: []
Проверка Hamcrest: is(not(empty()))
Статус списка: ❌  // Список пуст, обработка не требуется.

В качестве аналогии можно воспринимать список как вагоны поезда:

Markdown
Скопировать код
Заполненный вагон: 🚃 переполнен пассажирами (элементами) 🍏🍋🍇 – Мы готовы отправляться!
Пустой вагон: 🚃 пуст, пассажиров нет – Ожидаем отправления.

Hamcrest — это как проводник, который проверяет билеты перед отъездом: Все на местах? 🎫✅

Тонкости использования матчеров

Таинственные any и anything

Матчеры any и anything могут показаться загадочными на первый взгляд:

  • any(Class<T>): утверждает наличие элемента заданного типа.
  • anything(): всегда возвращает true, безотносительно к содержимому.

"Говорящие" утверждения

Хорошо построенное утверждение может служить комментарием к коду. В Hamcrest это достигается благодаря интуитивно понятным утверждениям:

Java
Скопировать код
assertThat(myList, not(isEmptyOrNullString()));

Это утверждение ясно говорит, что список не должен быть пустым или содержать null или пустые строки.

Практические советы: как избегать ошибок

Правильные импорты — приоритет номер один

Проверьте правильность импортированных матчеров, чтобы избежать конфликтов при компиляции.

Содержимое списка должно соответствовать ожиданиям

Важно не только проверить наличие элементов, но и удостовериться в правильности содержимого списка:

Java
Скопировать код
assertThat(myList, containsInAnyOrder(expectedElements)); // Мы ценим не только количество, но и качество содержимого.

Исключаем null из рассмотрения

Перед проверкой на непустоту убедитесь, что список не содержит null:

Java
Скопировать код
assertThat(myList, is(notNullValue())); // `null` не останется незамеченным.
assertThat(myList, is(not(empty()))); // А также проверим список на пустоту.

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

  1. CoreMatchers (Hamcrest)
  2. Руководство пользователя JUnit 5
  3. Написание утверждений с помощью JUnit 5 и Hamcrest
  4. GitHub – hamcrest/JavaHamcrest
  5. Утверждения JUnit 5 против матчеров Hamcrest
  6. Примеры кода Java для org.hamcrest.Matchers
Свежие материалы