«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.
«