ハムクレストオブジェクトマッチャー

1。概要

Hamcrestは、ユニットテストアサーションをよりシンプルで読みやすくするためのマッチャーを提供します。ここで、利用可能なマッチャーのいくつかの探索を開始できます。

このクイックチュートリアルでは、オブジェクトマッチャーについて詳しく説明します。

2.セットアップ

Hamcrestを取得するには、次のMaven依存関係をpom.xml追加する必要があります

 org.hamcrest java-hamcrest 2.0.0.0 test 

最新のHamcrestバージョンは、MavenCentralにあります。

3.オブジェクトマッチャー

オブジェクトマッチャーは、オブジェクトのプロパティのチェックを実行することを目的としています

マッチャーを調べる前に、例をわかりやすくするためにいくつかのBeanを作成します。

最初のオブジェクトはLocationと呼ばれ、プロパティはありません。

public class Location {}

私たちは二Bean名よ都市をし、次の実装を追加します。

public class City extends Location { String name; String state; // standard constructor, getters and setters @Override public String toString() { if (this.name == null && this.state == null) { return null; } StringBuilder sb = new StringBuilder(); sb.append("["); sb.append("Name: "); sb.append(this.name); sb.append(", "); sb.append("State: "); sb.append(this.state); sb.append("]"); return sb.toString(); } }

CityLocationを拡張することに注意してください。これは後で利用します。それでは、オブジェクトマッチャーから始めましょう!

3.1。hasToString

名前が示すように、hasToStringメソッドは、特定のオブジェクトに特定の文字列を返すtoStringメソッドがあることを確認します

@Test public void givenACity_whenHasToString_thenCorrect() { City city = new City("San Francisco", "CA"); assertThat(city, hasToString("[Name: San Francisco, State: CA]")); }

したがって、Cityを作成し、そのtoStringメソッドが必要な文字列を返すことを確認しています。これをさらに一歩進めて、同等性をチェックする代わりに、他の条件をチェックすることができます。

@Test public void givenACity_whenHasToStringEqualToIgnoringCase_thenCorrect() { City city = new City("San Francisco", "CA"); assertThat(city, hasToString( equalToIgnoringCase("[NAME: SAN FRANCISCO, STATE: CA]"))); }

ご覧のとおり、hasToStringはオーバーロードされており、パラメーターとして文字列またはテキストマッチャーの両方を受け取ることができます。したがって、次のようなこともできます。

@Test public void givenACity_whenHasToStringEmptyOrNullString_thenCorrect() { City city = new City(null, null); assertThat(city, hasToString(emptyOrNullString())); }

テキストマッチャーの詳細については、こちらをご覧ください。次に、次のオブジェクトマッチャーに移動しましょう。

3.2。typeCompatibleWith

このマッチャーは、is-a関係を表します。ここに私たちの来る場所のスーパークラスは遊びに:

@Test public void givenACity_whenTypeCompatibleWithLocation_thenCorrect() { City city = new City("San Francisco", "CA"); assertThat(city.getClass(), is(typeCompatibleWith(Location.class))); }

これは、City is- Locationであると言っています。これは真実であり、このテストに合格する必要があります。また、ネガティブケースをテストしたい場合:

@Test public void givenACity_whenTypeNotCompatibleWithString_thenCorrect() { City city = new City("San Francisco", "CA"); assertThat(city.getClass(), is(not(typeCompatibleWith(String.class)))); }

もちろん、Cityクラスは文字列ではありません

最後に、すべてのJavaオブジェクトが次のテストに合格する必要があることに注意してください。

@Test public void givenACity_whenTypeCompatibleWithObject_thenCorrect() { City city = new City("San Francisco", "CA"); assertThat(city.getClass(), is(typeCompatibleWith(Object.class))); }

マッチャー、アサーション全体を読みやすくすることを目的として、別のマッチャーのラッパーで構成されていることに注意してください

4.結論

Hamcrestは、アサーションを作成するためのシンプルでクリーンな方法を提供します。すべての開発者の生活をよりシンプルにし、すべてのプロジェクトをより読みやすくする多種多様なマッチャーがあります。

また、オブジェクトマッチャーは、クラスのプロパティをチェックする簡単な方法です。

いつものように、GitHubプロジェクトで完全な実装を見つけることができます。