Java >> Java チュートリアル >  >> Tag >> assert

Guava の AssertJ

この記事はシリーズの一部です:• AssertJ の紹介
• AssertJ for Guava (現在の記事)• AssertJ の Java 8 機能
• AssertJ によるカスタム アサーション

1.概要

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

2. Maven の依存関係

Guava で AssertJ を使用するには、次の依存関係を 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.実際の G​​uava アサーション

AssertJ Guava タイプのカスタム アサーションがあります:ByteSourceマルチマップオプション範囲範囲マップテーブル .

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. マルチマップ 主張

マルチマップ s は、複数の値を特定のキーに関連付けることができるマップです。 マルチマップ アサーションは通常の 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"));

さらに 2 つのアサーションを利用できますが、微妙な違いがあります:

  • containsAllEntriesOf そして
  • hasSameEntriesAs.

これら 2 つの主張を見てみましょう。いくつかのマップを定義することから始めます:

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 まったく同じエントリが含まれていますが、2 つの異なる Map の 2 つの異なるオブジェクトです 種類。 マップ mmap2 すべてのマップ間で共有される単一のエントリが含まれます。これで、次のアサーションが真になります:

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

3.3. オプション 主張

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

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

Optional<String> something = Optional.of("something");

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

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

3.4. 範囲 主張

Guava の Range のアサーション クラスには 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 プロジェクトにあります。

次の » AssertJ の Java 8 機能« 前AssertJの紹介
Java タグ