1概要
-
Hamcrestはユニットテストのアサーションをよりシンプルで読みやすくするためのmatcherを提供しています** 利用可能なmatcherのリンクのいくつかを調べることができます:
このクイックチュートリアルでは、オブジェクトマッチャーについて詳しく説明します。
2セットアップ
Hamcrestを取得するには、 pom.xml ** に次のMaven依存関係を追加するだけです。
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>java-hamcrest</artifactId>
<version>2.0.0.0</version>
<scope>test</scope>
</dependency>
最新のHamcrestバージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22java-hamcrest%22[Maven Central]で見つけることができます。
3オブジェクトマッチャー
-
オブジェクトマッチャーは、オブジェクトのプロパティをチェックするためのものです。
matcherを調べる前に、例をわかりやすくするために2つのBeanを作成します。
最初のオブジェクトは Location という名前で、プロパティはありません。
public class Location {}
2番目のBeanを City と命名し、それに次の実装を追加します。
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();
}
}
City は Location を拡張することに注意してください。後で利用します。それでは、オブジェクトマッチャーから始めましょう。
3.1. hasToString
その名前が示すように、 hasToString メソッドは、特定のオブジェクトに特定の String を返す toString メソッドがあることを確認します。
@Test
public void givenACity__whenHasToString__thenCorrect() {
City city = new City("San Francisco", "CA");
assertThat(city, hasToString("[Name: San Francisco, State: CA]"));
}
そのため、 City を作成し、その toString メソッドが必要な String を返すことを確認しています。これをさらに一歩進めて、同等性をチェックする代わりに、他の条件をチェックします。
@Test
public void givenACity__whenHasToStringEqualToIgnoringCase__thenCorrect() {
City city = new City("San Francisco", "CA");
assertThat(city, hasToString(
equalToIgnoringCase("[NAME: SAN FRANCISCO, STATE: CA]")));
}
ご覧のとおり、 hasToString はオーバーロードされており、 String またはテキストマッチャーの両方をパラメーター として受け取ることができます。だから、私たちは以下のようなこともできます。
@Test
public void givenACity__whenHasToStringEmptyOrNullString__thenCorrect() {
City city = new City(null, null);
assertThat(city, hasToString(emptyOrNullString()));
}
あなたはテキストマッチャーリンクに関するより多くの情報を見つけることができます:/hamcrest-text-matchers[ここ]。それでは、次のオブジェクトマッチャーに移りましょう。
3.2. typeCompatibleWith
このマッチャー は is-a 関係 を表します。ここに私たちの Location スーパークラスが登場します。
@Test
public void givenACity__whenTypeCompatibleWithLocation__thenCorrect() {
City city = new City("San Francisco", "CA");
assertThat(city.getClass(), is(typeCompatibleWith(Location.class)));
}
これは City が Locationであることを言っています 、これは真実であり、このテストはパスするはずです。また、否定的なケースをテストしたい場合は、
@Test
public void givenACity__whenTypeNotCompatibleWithString__thenCorrect() {
City city = new City("San Francisco", "CA");
assertThat(city.getClass(), is(not(typeCompatibleWith(String.class))));
}
もちろん、 City クラスは String. ではありません。
最後に、すべてのJavaオブジェクトは次のテストに合格する必要があります。
@Test
public void givenACity__whenTypeCompatibleWithObject__thenCorrect() {
City city = new City("San Francisco", "CA");
assertThat(city.getClass(), is(typeCompatibleWith(Object.class)));
}
アサーション全体を読みやすくする目的で、matcher is は他のmatcherのラッパーで構成されていることに注意してください。
4結論
Hamcrestはアサーションを作成するためのシンプルでクリーンな方法を提供します。
-
そしてオブジェクトマッチャーはクラスのプロパティをチェックする簡単な方法です。**
いつものように、完全な実装はhttps://github.com/eugenp/tutorials/tree/master/testing-modules/mockito[GitHubプロジェクト]にあります。