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 .