Hamcrest Common Core Matchers

1.概要

このクイックチュートリアルでは、シンプルで表現力豊かなテストケースを書くための、人気のあるhttp://hamcrest.org/[Hamcrest]フレームワークの __CoreMatchers __classを調べます。

その考えは、assert文を自然言語のように読ませることです。

2. Hamcrestセットアップ

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

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

このライブラリの最新版は常にhttps://mvnrepository.com/artifact/org.hamcrest/java -hamcrest[ここ]にあります。

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

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

is(T) は同等性をチェックするためのパラメータとしてオブジェクトを取り、 is(Matcher <T>) は同等性ステートメントをより表現力のあるものにすることを可能にする別のマッチング機能を取ります。

  • ほとんどすべてのメソッドでこれを使うことができます** :

String testString = "hamcrest core";

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

3.2. equalTo(T)

equalTo(T) は、オブジェクトをパラメータとして受け取り、他のオブジェクトとの等価性をチェックします。 これは is(Matcher <T>) : とよく使われます。

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(Object operand)を使用することもできます - これは等価性をチェックし、2つのオブジェクトが同じ静的型であることを強制しません。

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>)_

  • これらは頻繁に使用される is(not(nullValue)) へのショートカットです。 ** これらは、オブジェクトがnullでないこと、またはクラス型が等しいことを確認します。

Integer testNumber = 123;

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

3.6. instanceOf(Class <?>)

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

  • 確認のために、このメソッドは内部で _ isIntance(Object) of Class ** _ classを呼び出します。

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

3.7. isA (Class <T>型)

isA(Class <T> type) は、上記の 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(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> …​)および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("baeldung")));

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

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

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

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

assertThat(list, hasItem("java"));
assertThat(list, hasItem(isA(String.class)));
  • 同様に、 __ hasItems(T …​) および hasItems(Matcher <?extends T> …​)** __を使用して、複数の項目に対してアサートすることもできます。

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

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

3.12. both(Matcher <?extends T>)およびどちらか(Matcher <?extends T>)

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

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

そして __either(Matcher <?extends T>) __は、指定された条件のいずれかが調べられたオブジェクトと一致するときに一致します。

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

4. _String _ 比較

実際の文字列にテスト文字列が含まれる場合は、 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のさまざまなメソッドについて説明しました。

そして、いつものように、例のソースコードはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/mockito[over GitHub]にあります。