Проверка на null с assertThat в Hamcrest: правильный код

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

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

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

Чтобы выполнить быструю проверку на null, используйте метод assertThat из библиотеки Hamcrest и поставьте nullValue():

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

// Когда наша ожидаемая переменная — "ничего"!
assertThat(myObject, nullValue());
Кинга Идем в IT: пошаговый план для смены профессии

Элегантная проверка на null

Давайте рассмотрим, как элегантно использовать свойства библиотеки Hamcrest для проверки на null.

Элегантные методики проверки на null

С помощью Hamcrest наши тесты становятся более выразительными и понятными, как будто вы кодировали, вдохновленные Шекспиром! 🎭

Сравнение JUnit и Hamcrest при проверке на null

assertNull из JUnit предоставляет простой механизм проверки:

Java
Скопировать код
import static org.junit.Assert.assertNull;

// Производим проверку на любой null!
assertNull(myObject);

nullValue() от Hamcrest придает тестированию больше жизни:

Java
Скопировать код
// Это словно ожидание абсолютно пустой коробки
assertThat(myObject, is(nullValue()));

Применение is в сочетании с nullValue() делает утверждение особенным и интуитивно понятным!

Исследуем nullValue()

nullValue() — это один из основных матчеров в Hamcrest. Он делает ваши тестовые сценарии глубже, основываясь на принципах поведенческого тестирования (BDD).

Противоположность null: утверждение о non-null

Противоположностью null является non-null. Как с этим работает Hamcrest?

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

// Нет лучшего способа заявить "Я существую!", чем этот!
assertThat(myObject, is(notNullValue()));

Это утверждение говорит нам, что объект должен быть не null – небольшой переворот ситуации!

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

Воспринимайте проверку на null с использованием Hamcrest в Java, как посмотреть в пустой почтовый ящик (📭):

Markdown
Скопировать код
// Мой почтовый ящик — словно отголосок тишины
assertThat(mailbox.peek(), is(nullValue()));

📭 == 📬?

Сюжетна линия фильма о тестировании с Hamcrest:

  • mailbox.peek() – это проверка на наличие новой почты.
  • is(nullValue()) ожидает отсутствие писем.
  • Если null (нет писем), тест пройден – прекрасно, ящик пуст. 📭
  • Если non-null (есть письмо), тест провален – ох, неожиданно, пришло письмо! 💌
Markdown
Скопировать код
// Тестовый сценарий на проверку на null
Assert.assertThat(mailbox.peek(), is(nullValue())); // Ящик должен быть пуст!

Визуализация символов:

  • 📭: Ничего нет (null)
  • 💌: Важно, письмо (non-null)
  • ✅: Зрители довольны (пусто, как и предполагалось)
  • ❌: Просадка в сюжете (неожиданный контент)

Пишите код, будто это бестселлер

Hamcrest используется не только для определения null, но и для более точного выражения ваших намерений:

Java
Скопировать код
List<String> myList = getItems();

// Подход JUnit – без излишеств
assertTrue(myList.isEmpty());

// Подход Hamcrest – внимание к деталям
assertThat(myList, is(empty()));

Hamcrest полностью приоткрывает замысел ваших утверждений, подобно таинственному детективу. 🕵️

От вашего мозга до IDE

Выбор набора инструментов для формирования утверждений может отразить нюансы ваших намерений в коде, поэтому выбирать следует вдумчиво!

Оттенок Kotlin

Для поклонников языка Kotlin, Hamcrest будет ощущаться как дома:

kotlin
Скопировать код
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.`is`
import org.hamcrest.Matchers.nullValue

val myVal: String? = null

// Kotlin вместе с Hamcrest:
assertThat(myVal, `is`(nullValue()))

Фрагменты кода – ваш лексический запас

Важно помнить, что также как и в обучении языкам, код требует четкой формы для понимания. Используйте теги <code>, чтобы избежать путаницы с зарезервированными словами.

Метод AssertJ

AssertJ представляет собой альтернативный метод формирования "плавных" утверждений:

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

List<String> myList = getItems();

// AssertJ делает каждго из нас поэтом
assertThat(myList).isEmpty();

AssertJ, так же как и Hamcrest, обогащает утверждения естественностью языка, но использует для этого другой подход.

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

  1. Matchers (Hamcrest) — документация по матчерам Hamcrest, основным компонентам ваших утверждений.
  2. JUnit 5 User Guide — источник всего необходимого для написания тестов в JUnit 5.
  3. AssertJ – fluent assertions java library — для тех, кто предпочитает гибкие утверждения в Java.
  4. Newest 'assertthat' Questions – Stack Overflow — реальные примеры и обсуждения использования assertThat на Stack Overflow.
  5. Assert (JUnit API) — обзор истории использования утверждений в JUnit 4.
  6. A Unit Tester’s Guide to Mockito | Toptal® — подробное руководство по Mockito и её матчерам для эффективного модульного тестирования.
  7. MatcherAssert (Hamcrest) — подробный обзор класса MatcherAssert и метода assertThat.