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 .