番石榴AssertJ

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
File temp1 = File.createTempFile("bael","dung1");
File temp2 = File.createTempFile("bael","dung2");

并从它们创建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
    Table<Integer, String, String> table = HashBasedTable.create(2, 2);
    table.put(1,"A","PRESENT");
    table.put(1,"B","ABSENT");

    现在我们可以执行以下检查:

    1
    2
    3
    4
    assertThat(table)
      .hasRowCount(1)
      .containsValues("ABSENT")
      .containsCell(1,"B","ABSENT");

    4。结论

    在AssertJ系列的这篇文章中,我们探讨了所有与Guava相关的功能。

    可以在GitHub项目中找到所有示例和代码段的实现。