1. 概要

このクイックチュートリアルでは、シンプルで表現力豊かなテストケースを作成するための人気のあるHamcrestフレームワークのCoreMatchersクラスについて説明します。

アイデアは、assertステートメントを自然言語のように読ませることです。

2. ハムクレストのセットアップ

pom.xml ファイルに次の依存関係を追加することで、MavenでHamcrestを使用できます。

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>java-hamcrest</artifactId>
    <version>2.0.0.0</version>
    <scope>test</scope>
</dependency>

このライブラリの最新バージョンは、常にここにあります。

3. 一般的なコアマッチャー

3.1. is(T) is(マッチャー )。

The is(T) 同等性をチェックするためのパラメータとしてオブジェクトを取り、 is(マッチャー )。 別のマッチャーを使用して、等式ステートメントをより表現力豊かにします。

これはほとんどすべての方法で使用できます

String testString = "hamcrest core";

assertThat(testString, is("hamcrest core"));
assertThat(testString, is(equalTo("hamcrest core")));

3.2.  equalTo(T)

equalTo(T)は、オブジェクトをパラメーターとして受け取り、その同等性を別のオブジェクトと照合します。 これはis(Matcher ):

String actualString = "equalTo match";
List<String> actualList = Lists.newArrayList("equalTo", "match");

assertThat(actualString, is(equalTo("equalTo match")));
assertThat(actualList, is(equalTo(Lists.newArrayList("equalTo", "match"))));

equalToObject(オブジェクトオペランド)– を使用することもできます。これは、同等性をチェックし、2つのオブジェクトが同じ静的タイプであることを強制しません。

Object original = 100;
assertThat(original, equalToObject(100));

3.3.  not(T) not(マッチャー )。

The not(T) not(マッチャー )。 指定されたオブジェクトの不等式をチェックするために使用されます。 最初にオブジェクトを引数として取り、次に別のマッチャーを取ります。

String testString = "troy kingdom";

assertThat(testString, not("german kingdom"));
assertThat(testString, is(not(equalTo("german kingdom"))));
assertThat(testString, is(not(instanceOf(Integer.class))));

3.4. nullValue() nullValue(クラス )。

nullValue()は、検査対象のオブジェクトに対してnull値をチェックします。 The nullValue(クラス )。 指定されたクラスタイプオブジェクトのnull可能性をチェックします。

Integer nullObject = null;

assertThat(nullObject, is(nullValue()));
assertThat(nullObject, is(nullValue(Integer.class)));

3.5. notNullValue() notNullValue(クラス )。

これらは、頻繁に使用されるis(not(nullValue))へのショートカットです。 これらは、オブジェクトまたはクラスタイプのnull以外の同等性をチェックします。

Integer testNumber = 123;

assertThat(testNumber, is(notNullValue()));
assertThat(testNumber, is(notNullValue(Integer.class)));

3.6. instanceOf(Class> )。

The instanceOf(Class> )。 調べたオブジェクトが指定されたインスタンスの場合に一致しますクラスタイプ。

確認するために、このメソッドは isIntance(Object)クラスクラスを内部的に呼び出します。

assertThat("instanceOf example", is(instanceOf(String.class)));

3.7. isA (クラスタイプ)

The isA(クラスタイプ) 上記へのショートカットです instanceOf(Class> )。とまったく同じタイプの引数を取ります instanceOf(Class> )。

assertThat("Drogon is biggest dragon", isA(String.class));

3.8. sameInstance()

sameInstance()は、2つの参照変数がヒープ内の同じオブジェクトを指している場合に一致します。

String string1 = "Viseron";
String string2 = string1;

assertThat(string1, is(sameInstance(string2)));

3.9. any(クラス )。

The any(クラス )。 クラスが実際のオブジェクトと同じタイプであるかどうかを確認します。

assertThat("test string", is(any(String.class)));
assertThat("test string", is(any(Object.class)));

3.10. allOf(Matcher <? T>…)およびanyOf(Matcher <? T>…を拡張します

使用できます allOf(Matcher <? T>…を拡張します実際のオブジェクトが指定されたすべての条件に一致するかどうかをアサートするには、次のようにします。

String testString = "Achilles is powerful";
assertThat(testString, allOf(startsWith("Achi"), endsWith("ul"), containsString("Achilles")));

The anyOf(Matcher <? T>…を拡張します次のように動作します allOf(Matcher <? T>…を拡張します) ただし、検査対象のオブジェクトが指定された条件のいずれかに一致する場合は一致します。

String testString = "Hector killed Achilles";
assertThat(testString, anyOf(startsWith("Hec"), containsString("baeldung")));

3.11.  hasItem(T) hasItem(Matcher <? T>)を拡張します

調べた場合、これらは一致します反復可能コレクションは、内部の特定のオブジェクトまたはマッチャーと一致します hasItem() また hasItem(Matcher <? T>)を拡張します

これがどのように機能するかを理解しましょう:

List<String> list = Lists.newArrayList("java", "spring", "baeldung");

assertThat(list, hasItem("java"));
assertThat(list, hasItem(isA(String.class)));

同様に、 私たちもできますを使用して複数のアイテムに対してアサートする hasItems(T…) hasItems(Matcher <? T>…を拡張します

List<String> list = Lists.newArrayList("java", "spring", "baeldung");

assertThat(list, hasItems("java", "baeldung"));
assertThat(list, hasItems(isA(String.class), endsWith("ing")));

3.12. 両方(マッチャー<? T>)とどちらか(Matcher <? T>)を拡張します

名前が示すように、 両方(マッチャー<? T>)を拡張します指定された両方の条件が検査対象のオブジェクトと一致する場合に一致します。

String testString = "daenerys targaryen";
assertThat(testString, both(startsWith("daene")).and(containsString("yen")));

どちらか(マッチャー<? T>)を拡張します指定された条件のいずれかが検査対象のオブジェクトと一致する場合に一致します。

String testString = "daenerys targaryen";
assertThat(testString, either(startsWith("tar")).or(containsString("targaryen")));

4.  比較

containsString(String)または containsStringIgnoringCase(String)を使用して、実際の文字列にテスト文字列が含まれているかどうかをアサートできます。

String testString = "Rhaegar Targaryen";
assertThat(testString, containsString("aegar"));
assertThat(testString, containsStringIgnoringCase("AEGAR"));

または、 startupsWith(String)および startupsWithIgnoringCase(String)を使用して、実際の文字列がテスト文字列で始まるかどうかをアサートします。

assertThat(testString, startsWith("Rhae"));
assertThat(testString, startsWithIgnoringCase("rhae"));

endsWith(String)または endsWithIgnoringCase(String)を使用して、実際の文字列がテスト文字列で終わるかどうかをアサートすることもできます。

assertThat(testString, endsWith("aryen"));
assertThat(testString, endsWithIgnoringCase("ARYEN"));

5. 結論

この記事では、HamcrestライブラリのCoreMatchersクラスのさまざまなメソッドについて説明しました。

そして、いつものように、例のソースコードはGitHubにあります。