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

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

1. обзор

Эта статья посвящена функциямAssertJ, связанным с Java8, и является третьей статьей из серии.

Если вам нужна общая информация об основных функциях, прочтите первую статью из серииIntroduction to AssertJ, а затем -AssertJ for Guava.

2. Maven Зависимости

Поддержка Java 8 включена в основной модуль AssertJ Core начиная с версии 3.5.1. Чтобы использовать модуль, вам нужно будет включить следующий раздел в ваш файлpom.xml:


    org.assertj
    assertj-core
    3.5.1
    test

Эта зависимость охватывает только основные утверждения Java. Если вы хотите использовать расширенные утверждения, вам нужно будет добавить дополнительные модули отдельно.

Последнюю версию Core можно найтиhere.

3. Возможности Java 8

AssertJ использует возможности Java 8, предоставляя специальные вспомогательные методы и новые утверждения для типов Java 8.

3.1. Optional Утверждения

Давайте создадим простой экземплярOptional:

Optional givenOptional = Optional.of("something");

Теперь мы можем легко проверить, содержит лиOptional какое-либо значение и что это за значение:

assertThat(givenOptional)
  .isPresent()
  .hasValue("something");

3.2. Predicate Утверждения

Давайте создадим простой экземплярPredicate, проверив длинуString:

Predicate 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's _, _, но не используют метод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.

Давайте создадим простойList с объектамиLocalDate:

List givenList = asList(ofYearDay(2016, 5), ofYearDay(2015, 6));

теперь мы можем легко проверить, содержит ли этотList хотя бы один объект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:

List givenList = Arrays.asList("");

и теперь вы можете утверждать:

assertThat(givenList)
  .hasOnlyOneElementSatisfying(s -> assertThat(s).isEmpty());

3.9. Matches Вспомогательный метод

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

Возьмем пустойString:

String emptyString = "";

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

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

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

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

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