Hamcrest Common Core Matchers

Hamcrest共通コアマッチャー

1. 概要

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

この考え方は、アサート文を自然言語のように読み上げることです。

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

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


    org.hamcrest
    java-hamcrest
    2.0.0.0
    test

このライブラリの最新バージョンは常にhereで見つけることができます。

3. 共通コアマッチャー

3.1. is(T)およびis(Matcher<T>)

is(T)はオブジェクトをパラメータとして受け取り、同等性をチェックします。is(Matcher<T>)は別のマッチャーを取り、同等性ステートメントをより表現力豊かにします。

We can use this with almost all of the methods

String testString = "hamcrest core";

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

3.2. equalTo(T)

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

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

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

等しいことをチェックし、2つのオブジェクトが同じ静的タイプであることを強制しないequalToObject(Object operand) – を使用することもできます。

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

3.3. not(T)およびnot(Matcher<T>)

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

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(Class<T>)

調査対象のオブジェクトに対するnull valueのnullValue() check。 nullValue(Class<T>) は、指定されたクラスタイプオブジェクトのnull可能性をチェックします。

Integer nullObject = null;

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

3.5. notNullValue()およびnotNullValue(Class<T>)

These are a shortcut to frequently used is(not(nullValue))これらは、オブジェクトまたはクラスタイプがnullでないかどうかをチェックします。

Integer testNumber = 123;

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

3.6. instanceOf(Class<?>)

調査対象のオブジェクトが指定されたClass typeのインスタンスである場合、instanceOf(Class<?>)は一致します。

To verify, this method internally calls theisIntance(Object) of Class class:

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

3.7. isA(Class<T> type)

isA(Class<T> type)は、上記のinstanceOf(Class<?>)へのショートカットです。 It takes the exact same type of argument as an 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(Class<T>)

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

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

3.10. allOf(Matcher<? extends T>…) and anyOf(Matcher<? extends T>…)

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

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

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

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

3.11. hasItem(T)およびhasItem(Matcher<? extends T>)

調べたIterable collectionがhasItem()またはhasItem(Matcher<? extends T>)内の特定のオブジェクトまたはマッチャーと一致する場合、これらは一致します。

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

List list = Lists.newArrayList("java", "spring", "example");

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

Similarly, we can also assert against more than one items using hasItems(T…)and hasItems(Matcher<? extends T>…)

List list = Lists.newArrayList("java", "spring", "example");

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

3.12. both(Matcher<? extends T>) and either(Matcher<? extends T>)

名前が示すように、指定された条件の両方が調査対象のオブジェクトと一致する場合、both(Matcher<? extends T>) は一致します。

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

指定された条件のいずれかが調査対象のオブジェクトと一致する場合、either(Matcher<? extends T>)matches:

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

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

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

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

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

5. 結論

この記事では、Hamcrest libraryのCoreMatchers classのさまざまなメソッドについて説明しました。

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