«1. Обзор

Эта статья посвящена возможностям AssertJ, связанным с Java8, и является третьей статьей в этой серии.

Если вам нужна общая информация о его основных функциях, посмотрите первую статью из серии «Введение в 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;

Теперь вы можете легко проверить, какие строки отвергаются или принимаются предикатом:

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

Утверждения 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

Метод 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

Вспомогательный метод Matches позволяет проверить, соответствует ли данный объект заданной функции Predicate.

Возьмем пустую строку:

String emptyString = "";

и теперь мы можем проверить ее состояние, предоставив адекватную лямбда-функцию Predicate:

assertThat(emptyString)
  .matches(String::isEmpty);

4. Заключение

В этой последней статье из серии AssertJ , мы изучили все расширенные функции AssertJ Java 8, которые завершают серию.

Реализацию всех примеров и фрагментов кода можно найти в проекте GitHub.

Next »

Custom Assertions with AssertJ

« Previous

AssertJ for Guava