1. Обзор
Эта статья посвящена возможностям AssertJ , связанным с Java8, и является третьей статьей из этой серии.
Если вам нужна общая информация о его основных функциях, посмотрите первую статью из серии Introduction to AssertJ, а затем AssertJ для Guava .
2. Зависимости Maven
Поддержка Java 8 включена в основной модуль AssertJ Core, начиная с версии 3.5.1. Чтобы использовать модуль, вам необходимо включить следующий раздел в файл pom.xml
:
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.5.1</version>
<scope>test</scope>
</dependency>
Эта зависимость охватывает только основные утверждения Java. Если вы хотите использовать расширенные утверждения, вам нужно будет добавить дополнительные модули отдельно.
Последнюю версию Core можно найти здесь .
3. Возможности Java 8
AssertJ использует возможности Java 8, предоставляя специальные вспомогательные методы и новые утверждения для типов Java 8.
3.1. Необязательные
утверждения
Давайте создадим простой необязательный
экземпляр:
Optional<String> givenOptional = Optional.of("something");
Теперь мы можем легко проверить, содержит ли необязательный
элемент какое-либо значение и что это за значение:
assertThat(givenOptional)
.isPresent()
.hasValue("something");
3.2. Предикатные
утверждения
Давайте создадим простой экземпляр Predicate
, проверив длину строки
:
Predicate<String> predicate = s -> s.length() > 4;
Теперь вы можете легко проверить, какие String
отклоняются или принимаются Predicate:
assertThat(predicate)
.accepts("aaaaa", "bbbbb")
.rejects("a", "b")
.acceptsAll(asList("aaaaa", "bbbbb"))
.rejectsAll(asList("a", "b"));
3.3. Утверждения LocalDate
Начнем с определения двух объектов LocalDate
:
LocalDate givenLocalDate = LocalDate.of(2016, 7, 8);
LocalDate todayDate = LocalDate.now();
Теперь вы можете легко проверить, является ли данная дата до/после указанной даты или сегодня:
assertThat(givenLocalDate)
.isBefore(LocalDate.of(2020, 7, 8))
.isAfterOrEqualTo(LocalDate.of(1989, 7, 8));
assertThat(todayDate)
.isAfter(LocalDate.of(1989, 7, 8))
.isToday();
3.4. Утверждения LocalDateTime
Утверждения LocalDateTime
работают
аналогично LocalDate
, но не используют метод isToday
.
Давайте создадим пример объекта LocalDateTime
:
LocalDateTime givenLocalDate = LocalDateTime.of(2016, 7, 8, 12, 0);
И теперь вы можете проверить:
assertThat(givenLocalDate)
.isBefore(LocalDateTime.of(2020, 7, 8, 11, 2));
3.5. Утверждения местного
времени
Утверждения LocalTime
работают аналогично другим утверждениям java.util.time.*
, но у них есть один эксклюзивный метод: hasSameHourAs.
Давайте создадим пример объекта LocalTime
:
LocalTime givenLocalTime = LocalTime.of(12, 15);
и теперь вы можете утверждать:
assertThat(givenLocalTime)
.isAfter(LocalTime.of(1, 0))
.hasSameHourAs(LocalTime.of(12, 0));
3.6. Вспомогательный метод FlatExtracting
FlatExtracting — это специальный служебный метод, который использует лямбда- выражения
Java 8 для извлечения свойств из элементов Iterable
.
Давайте создадим простой список
с объектами LocalDate
:
List<LocalDate> givenList = asList(ofYearDay(2016, 5), ofYearDay(2015, 6));
теперь мы можем легко проверить, содержит ли этот список хотя бы один объект
LocalDate
с 2015 годом:
assertThat(givenList)
.flatExtracting(LocalDate::getYear)
.contains(2015);
метод flatExtracting
не ограничивает нас извлечением полей. Мы всегда можем предоставить ему любую функцию:
assertThat(givenList)
.flatExtracting(LocalDate::isLeapYear)
.contains(true);
или даже:
assertThat(givenList)
.flatExtracting(Object::getClass)
.contains(LocalDate.class);
Вы также можете извлечь несколько свойств одновременно:
assertThat(givenList)
.flatExtracting(LocalDate::getYear, LocalDate::getDayOfMonth)
.contains(2015, 6);
3.7. Удовлетворяет
вспомогательному методу
Метод Satisfies
позволяет быстро проверить, удовлетворяет ли объект всем предоставленным утверждениям.
Давайте создадим пример экземпляра String
:
String givenString = "someString";
и теперь мы можем предоставить утверждения в виде лямбда-тела:
assertThat(givenString)
.satisfies(s -> {
assertThat(s).isNotEmpty();
assertThat(s).hasSize(10);
});
3.8. Вспомогательный метод HasOnlyOneElementSatisfying
Вспомогательный метод HasOnlyOneElement
позволяет проверить, содержит ли экземпляр Iterable
только один элемент, удовлетворяющий предоставленным утверждениям.
Давайте создадим пример списка:
List<String> givenList = Arrays.asList("");
и теперь вы можете утверждать:
assertThat(givenList)
.hasOnlyOneElementSatisfying(s -> assertThat(s).isEmpty());
3.9. Вспомогательный
метод совпадений
Вспомогательный метод Matches
позволяет проверить, соответствует ли данный объект заданной функции Predicate
.
Возьмем пустую строку:
String emptyString = "";
и теперь мы можем проверить его состояние, предоставив адекватную лямбда-функцию Predicate :
assertThat(emptyString)
.matches(String::isEmpty);
4. Вывод
В этой последней статье из серии AssertJ мы рассмотрели все расширенные функции AssertJ Java 8, которая завершает серию.
Реализацию всех примеров и фрагментов кода можно найти в проекте GitHub .