Перейти к основному содержимому

Утверждают, что необязательный элемент Java имеет определенное значение

· 2 мин. чтения

1. Обзор

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

В этом коротком руководстве мы рассмотрим, как писать эти утверждения, используя функции как из JUnit , так и из AssertJ .

2. Проверьте, является ли необязательный параметр пустым или нет

Если нам нужно только выяснить, имеет ли значение option значение, мы можем утверждать isPresent или isEmpty .

2.1. Необязательный тест имеет значение

Если необязательный объект имеет значение, мы можем утвердить его для Optional.isPresent :

assertTrue(optional.isPresent());

Однако библиотека AssertJ предоставляет более свободный способ выразить это:

assertThat(optional).isNotEmpty();

2.2. Необязательный тест пуст

Мы можем изменить логику при использовании JUnit:

assertFalse(optional.isPresent());

Кроме того, в Java 11 и выше мы можем использовать Optional.isEmpty :

assertTrue(optional.isEmpty());

Однако AssertJ также предоставляет нам изящную альтернативу:

assertThat(optional).isEmpty();

3. Проверка значения необязательного

Часто мы хотим проверить значение внутри опциона , а не просто наличие или отсутствие.

3.1. Использование утверждений JUnit

Мы можем использовать необязательный.get для предоставления значения, а затем написать утверждение об этом :

Optional<String> optional = Optional.of("SOMEVALUE");
assertEquals("SOMEVALUE", optional.get());

Однако использование get может вызвать исключение, что усложняет понимание ошибки теста. Таким образом, мы можем предпочесть сначала установить, присутствует ли значение:

assertTrue(optional.isPresent());
assertEquals("SOMEVALUE", optional.get());

Однако, Необязательный поддерживает метод equals , поэтому мы можем использовать Необязательный с правильным значением в нем как часть общего утверждения равенства:

Optional<String> expected = Optional.of("SOMEVALUE");
Optional<String> actual = Optional.of("SOMEVALUE");
assertEquals(expected, actual);

3.2. Использование AssertJ

С AssertJ мы можем использовать беглое утверждение hasValue :

assertThat(Optional.of("SOMEVALUE")).hasValue("SOMEVALUE");

4. Вывод

В этой статье мы рассмотрели несколько способов тестирования Optional .

Мы увидели, как встроенные утверждения JUnit можно использовать с isPresent и get . Мы также видели, как Optional.equals предоставляет нам возможность сравнивать необязательные объекты в наших утверждениях.

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

Как всегда, код, представленный в этой статье, доступен на GitHub .