Hamcrest Object Matchers

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プロジェクト]にあります。

前の投稿:Java RegExpsで文字をエスケープするためのガイド
次の投稿:CopyOnWriteArrayListガイド