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

AssertJ アサーションでの条件の使用

1.概要

このチュートリアルでは、AssertJ ライブラリを見ていきます。特に、条件を定義および使用して、読み取り可能で保守可能なテストを作成する方法について説明します。

AssertJ の基本はここにあります。

2.テスト中のクラス

テスト ケースを作成するターゲット クラスを見てみましょう:

public class Member {
    private String name;
    private int age;

    // constructors and getters
}

3.条件の作成

Condition をインスタンス化するだけで、アサーション条件を定義できます。 適切な引数を持つクラス。

条件を作成する最も便利な方法 述語を取るコンストラクタを使用することです パラメータとして .他のコンストラクターでは、サブクラスを作成して matches をオーバーライドする必要があります これはあまり便利ではありません。

Condition の構築時 オブジェクトの場合、条件が評価される値の型である型引数を指定する必要があります。

年齢の条件を宣言しましょう メンバーのフィールド クラス:

Condition<Member> senior = new Condition<>(
  m -> m.getAge() >= 60, "senior");

先輩 変数が Condition を参照するようになりました Person かどうかをテストするインスタンス 年齢に基づいてシニアです .

コンストラクタの 2 番目の引数、文字列 「シニア」 は、条件が失敗した場合にユーザー フレンドリーなエラー メッセージを作成するために AssertJ 自体によって使用される短い説明です。

Person かどうかをチェックする別の条件 名前を持っています 「ジョン」は次のようになります:

Condition<Member> nameJohn = new Condition<>(
  m -> m.getName().equalsIgnoreCase("John"), 
  "name John"
);

4.テストケース

それでは、Condition の使用方法を見てみましょう。 テストクラスのオブジェクト。条件がseniorであると仮定します とジョンの名前 テスト クラスのフィールドとして使用できます。

4.1.スカラー値のアサート

次のテストは 年齢 として合格する必要があります 値が年功序列のしきい値を超えています:

Member member = new Member("John", 65);
assertThat(member).is(senior);

is を使用したアサーション メソッドのパス、isNot を使用したアサーション 同じ引数を指定すると失敗します:

// assertion fails with an error message containing "not to be <senior>"
assertThat(member).isNot(senior);

nameJohn の使用 変数、2 つの同様のテストを書くことができます:

Member member = new Member("Jane", 60);
assertThat(member).doesNotHave(nameJohn);

// assertion fails with an error message containing "to have:\n <name John>"
assertThat(member).has(nameJohn);

している メソッド、および isNot そして持っていない メソッドのセマンティクスは同じです .どちらを使用するかは、選択の問題です。それでも、テスト コードを読みやすくするものを選択することをお勧めします。

4.2.コレクションの主張

条件はスカラー値だけでは機能しませんが、コレクション内の要素の有無を確認することもできます。 テストケースを見てみましょう:

List<Member> members = new ArrayList<>();
members.add(new Member("Alice", 50));
members.add(new Member("Bob", 60));

assertThat(members).haveExactly(1, senior);
assertThat(members).doNotHave(nameJohn);

haveExactly メソッドは、指定された Condition を満たす要素の正確な数をアサートします 、一方、doNotHave メソッドは、要素の不在をチェックします。

メソッド haveExactly そしてdoNotHave コレクション条件を扱っているのはそれだけではありません。これらのメソッドの完全なリストについては、API ドキュメントの AbstractIterableAssert クラスを参照してください。

4.3.条件の組み合わせ

アサーションの 3 つの静的メソッドを使用して、さまざまな条件を組み合わせることができます クラス:

  • ではない – 指定された条件が満たされない場合に満たされる条件を作成します
  • allOf – 指定されたすべての条件が満たされた場合にのみ満たされる条件を作成します
  • anyOf – 指定された条件の少なくとも 1 つが満たされた場合に満たされる条件を作成します

そうでない方法は次のとおりです そしてすべて メソッドを使用して条件を組み合わせることができます:

Member john = new Member("John", 60);
Member jane = new Member("Jane", 50);
        
assertThat(john).is(allOf(senior, nameJohn));
assertThat(jane).is(allOf(not(nameJohn), not(senior)));

同様に、anyOf を利用できます :

Member john = new Member("John", 50);
Member jane = new Member("Jane", 60);
        
assertThat(john).is(anyOf(senior, nameJohn));
assertThat(jane).is(anyOf(nameJohn, senior));

5.結論

このチュートリアルでは、AssertJ 条件のガイドと、それらを使用してテスト コードで非常に読みやすいアサーションを作成する方法について説明しました。

すべての例とコード スニペットの実装は、GitHub で見つけることができます。


Java タグ