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

Особенности AssertJ в Java 8

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

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 .