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.