«1. Обзор

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

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

Чтобы использовать AssertJ с Guava, вам нужно добавить следующую зависимость в ваш pom.xml:

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-guava</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>

Вы можете найти последнюю версию здесь.

И обратите внимание, что, начиная с версии 3.0.0, AssertJ Guava опирается на Java 8 и AssertJ Core 3.x.

3. Утверждения Guava в действии

AssertJ имеет пользовательские утверждения для типов Guava: ByteSource, Multimap, Optional, Range, RangeMap и Table.

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

Начнем с создания двух пустых временных файлов:

File temp1 = File.createTempFile("bael", "dung1");
File temp2 = File.createTempFile("bael", "dung2");

и создания из них экземпляров ByteSource:

ByteSource byteSource1 = Files.asByteSource(temp1);
ByteSource byteSource2 = Files.asByteSource(temp2);

Теперь мы можем написать следующее утверждение:

assertThat(buteSource1)
  .hasSize(0)
  .hasSameContentAs(byteSource2);

3.2. Multimap Assertions

Multimaps — это карты, которые могут ассоциировать более одного значения с данным ключом. Утверждения Multimap работают почти так же, как и обычные реализации Map.

Давайте начнем с создания экземпляра Multimap и добавления некоторых записей:

Multimap<Integer, String> mmap = Multimaps
  .newMultimap(new HashMap<>(), Sets::newHashSet);
mmap.put(1, "one");
mmap.put(1, "1");

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

assertThat(mmap)
  .hasSize(2)
  .containsKeys(1)
  .contains(entry(1, "one"))
  .contains(entry(1, "1"));

Также доступны два дополнительных утверждения – с небольшой разницей между ними: ~ ~~ содержит AllEntriesOf и hasSameEntriesAs.

    Давайте посмотрим на эти два утверждения; мы начнем с определения нескольких карт:

Как видите, mmap1 и mmap1_clone содержат одни и те же записи, но являются двумя разными объектами двух разных типов Map. Карта mmap2 содержит одну запись, которая является общей для всех карт. Теперь верно следующее утверждение:

Multimap<Integer, String> mmap1 = ArrayListMultimap.create();
mmap1.put(1, "one");
mmap1.put(1, "1");
mmap1.put(2, "two");
mmap1.put(2, "2");

Multimap<Integer, String> mmap1_clone = Multimaps
  .newSetMultimap(new HashMap<>(), HashSet::new);
mmap1_clone.put(1, "one");
mmap1_clone.put(1, "1");
mmap1_clone.put(2, "two");
mmap1_clone.put(2, "2");

Multimap<Integer, String> mmap2 = Multimaps
  .newSetMultimap(new HashMap<>(), HashSet::new);
mmap2.put(1, "one");
mmap2.put(1, "1");

3.3. Необязательные утверждения

assertThat(mmap1)
  .containsAllEntriesOf(mmap2)
  .containsAllEntriesOf(mmap1_clone)
  .hasSameEntriesAs(mmap1_clone);

Утверждения для необязательного в Guava включают проверку наличия значения и утилиты для извлечения внутреннего значения.

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

Теперь мы можем проверить наличие значения и утвердить содержимое Optional:

Optional<String> something = Optional.of("something");

3.4. Утверждения диапазона

assertThat(something)
  .isPresent()
  .extractingValue()
  .isEqualTo("something");

Утверждения для класса Range в Guava включают проверку нижней и верхней границ диапазона или того, находится ли определенное значение в заданном диапазоне.

Давайте определим простой диапазон символов, выполнив следующие действия:

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

Range<String> range = Range.openClosed("a", "g");

3.5. Табличные утверждения

assertThat(range)
  .hasOpenedLowerBound()
  .isNotEmpty()
  .hasClosedUpperBound()
  .contains("b");

Табличные утверждения AssertJ позволяют проверять количество строк и столбцов и наличие значения ячеек.

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

и теперь мы можем выполнить следующую проверку:

Table<Integer, String, String> table = HashBasedTable.create(2, 2);
table.put(1, "A", "PRESENT");
table.put(1, "B", "ABSENT");

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

assertThat(table)
  .hasRowCount(1)
  .containsValues("ABSENT")
  .containsCell(1, "B", "ABSENT");

В этой статье из серии AssertJ мы рассмотрели все, что связано с Guava. Особенности.

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

«

Next »

AssertJ’s Java 8 Features

« Previous

Introduction to AssertJ