AssertJ для гуавы

AssertJ для гуавы

1. обзор

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

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

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


    org.assertj
    assertj-guava
    3.0.0
    test

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

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

3. Утверждения гуавы в действии

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

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

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

Multimap 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"));

Доступны также два дополнительных утверждения - с небольшой разницей между ними:

  • containsAllEntriesOf и

  • hasSameEntriesAs.

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

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

Multimap 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 mmap2 = Multimaps
  .newSetMultimap(new HashMap<>(), HashSet::new);
mmap2.put(1, "one");
mmap2.put(1, "1");

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

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

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

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

Начнем с создания экземпляраOptional:

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

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

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

3.4. Rangeс Утверждения

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

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

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

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

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

3.5. Tableс Утверждения

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

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

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

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

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

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

В этой статье из серии AssertJ мы рассмотрели все функции, связанные с гуавой.

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