グアバ語のAssertJ

グアバのAssertJ

1. 概要

この記事は、AssertJ Guava関連のアサーションに焦点を当てており、AssertJシリーズの2番目の記事です。 AssertJに関する一般的な情報が必要な場合は、シリーズIntroduction to AssertJの最初の記事を参照してください。

2. Mavenの依存関係

GuavaでAssertJを使用するには、pom.xmlに次の依存関係を追加する必要があります。


    org.assertj
    assertj-guava
    3.0.0
    test

最新バージョンhereを見つけることができます。

また、バージョン3.0.0以降、AssertJ GuavaJava 8AssertJ Core 3.xに依存していることに注意してください。

3. 動作中のグアバアサーション

AssertJには、グアバタイプのカスタムアサーションがあります:ByteSourceMultimapOptionalRangeRangeMap、およびTable

3.1. ByteSourceアサーション

2つの空の一時ファイルを作成することから始めましょう。

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"));

2つの追加のアサーションも利用できますが、それらの間にはわずかな違いがあります。

  • containsAllEntriesOfおよび

  • hasSameEntriesAs。

これらの2つのアサーションを見てみましょう。まず、いくつかのマップを定義します。

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");

ご覧のとおり、mmap1mmap1_cloneにはまったく同じエントリが含まれていますが、2つの異なるMapタイプの2つの異なるオブジェクトです。 Map mmap2には、すべてのマップ間で共有される単一のエントリが含まれています。 これで、次のアサーションが真になります。

assertThat(mmap1)
  .containsAllEntriesOf(mmap2)
  .containsAllEntriesOf(mmap1_clone)
  .hasSameEntriesAs(mmap1_clone);

3.3. Optional アサーション

GuavaのOptionalのアサーションには、値の存在チェックと内部値を抽出するためのユーティリティが含まれます。

Optionalインスタンスを作成することから始めましょう:

Optional something = Optional.of("something");

これで、値の存在を確認し、Optionalのコンテンツをアサートできます。

assertThat(something)
  .isPresent()
  .extractingValue()
  .isEqualTo("something");

3.4. Range アサーション

GuavaのRangeクラスのアサーションには、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シリーズのこの記事では、Guava関連のすべての機能について説明しました。

すべての例とコードスニペットの実装は、GitHub projectにあります。