AssertJ for Guava
1.概述
本文重点介绍与AssertJ Guava相关的断言,并且是AssertJ系列的第二篇文章。如果您想了解有关AssertJ的一些常规信息,请参阅AssertJ简介系列中的第一篇文章。
2. Maven依赖
为了在Guava中使用AssertJ,您需要在pom.xml中添加以下依赖项:
1 2 3 4 5 6 | <dependency> <groupId>org.assertj</groupId> assertj-guava</artifactId> <version>3.0.0</version> <scope>test</scope> </dependency> |
您可以在这里找到最新版本。
请注意,自版本3.0.0起,AssertJ Guava依赖于Java 8和AssertJ Core3.x。
3.行动中的番石榴断言
AssertJ具有针对Guava类型的自定义断言:ByteSource,Multimap,Optional,Range,RangeMap和Table。
3.1。 ByteSource断言
让我们从创建两个空的临时文件开始:
1 2 |
并从它们创建ByteSource实例:
1 2 | ByteSource byteSource1 = Files.asByteSource(temp1); ByteSource byteSource2 = Files.asByteSource(temp2); |
现在我们可以编写以下断言:
1 2 3 | assertThat(buteSource1) .hasSize(0) .hasSameContentAs(byteSource2); |
3.2。多图断言
多图是可以将多个值与给定键关联的图。 Multimap断言的工作原理与普通Map实现非常相似。
让我们从创建Multimap实例并添加一些条目开始:
1 2 3 4 | Multimap<Integer, String> mmap = Multimaps .newMultimap(new HashMap<>(), Sets::newHashSet); mmap.put(1,"one"); mmap.put(1,"1"); |
现在我们可以断言:
1 2 3 4 5 | assertThat(mmap) .hasSize(2) .containsKeys(1) .contains(entry(1,"one")) .contains(entry(1,"1")); |
另外还有两个可用的断言–它们之间的细微差别:
containsAllEntriesOf和
hasSameEntriesAs。
让我们看一下这两个断言;我们将从定义一些地图开始:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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包含完全相同的条目,但是它们是两种不同Map类型的两个不同对象。 Map mmap2包含一个在所有地图之间共享的条目。现在,以下断言为真:
1 2 3 4 | assertThat(mmap1) .containsAllEntriesOf(mmap2) .containsAllEntriesOf(mmap1_clone) .hasSameEntriesAs(mmap1_clone); |
3.3。可选断言
Guava的Optional的断言涉及值存在性检查和用于提取内部值的实用程序。
让我们从创建一个Optional实例开始:
1 | Optional<String> something = Optional.of("something"); |
现在,我们可以检查值的存在并声明Optional的内容:
1 2 3 4 | assertThat(something) .isPresent() .extractingValue() .isEqualTo("something"); |
3.4。范围断言
番石榴的Range类的断言涉及检查Range的上下限或某个值是否在给定范围内。
让我们通过执行以下操作来定义一个简单的字符范围:
1 | Range<String> range = Range.openClosed("a","g"); |
现在我们可以测试:
1 2 3 4 5 | assertThat(range) .hasOpenedLowerBound() .isNotEmpty() .hasClosedUpperBound() .contains("b"); |
3.5。表断言
AssertJ的特定于表的断言允许检查行数和列数以及是否存在单元格值。
让我们创建一个简单的Table实例:
1 2 3 |
现在我们可以执行以下检查:
1 2 3 4 | assertThat(table) .hasRowCount(1) .containsValues("ABSENT") .containsCell(1,"B","ABSENT"); |
4。结论
在AssertJ系列的这篇文章中,我们探讨了所有与Guava相关的功能。
可以在GitHub项目中找到所有示例和代码段的实现。