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

AssertJ для Гуавы

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

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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. Утверждения гуавы в действии

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 — это карты, которые могут ассоциировать более одного значения с данным ключом. Утверждения 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 и
  • имеет такие же записи, как.

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

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

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

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

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

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

Начнем с создания необязательного экземпляра:

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

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

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

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

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

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

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

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

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

3.5. `` Утверждения таблицы ****

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

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

Table<Integer, String, String> 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 мы рассмотрели все функции, связанные с Guava.

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