web-dev-qa-db-ja.com

hamcrest-library Matcherとhamcrest-core CoreMatcherの違い

Hamcrestのorg.hamcrest.Matchersクラスはorg.hamcrest.CoreMatchersに非常に似ているようです(Matchersの方が多いようです)。なぜ私はCoreMatchersを使用することを選択しますか(クラスが少し小さいように見えることを除いて)、なぜこれら2つのクラスは非常に似ているのですか?

68
Jeff Storey

Hamcrestマッチャーは、いくつかのモジュールに分割されています。 「コア」には、他のマッチャーの構築に必要な最も基本的なマッチャーと抽象クラスが含まれています。 org.hamcrest.CoreMatchersには、これらのマッチャーのみのファクトリメソッドが含まれています。他のマッチャーは、一致するオブジェクトのタイプによってグループ化された「ライブラリ」モジュールにあり、オプションです。 org.hamcrest.Matchersには、両方のマッチャーセットが含まれます。

あなたはどちらを使うべきですか?問題なくすべてを後者から静的にインポートします。おそらくコンパイル時間が少し長くかかるかもしれませんが、それは私にとって決して問題ではありませんでした。 JUnitインポートに加えて、これをユニットテストの一番上に配置します。

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

これにより、テスト方法で最も読みやすくなります。

47
David Harkness

(私と同じように)Mockitoを頻繁に使用している場合は、次のことを行っている可能性があります。

import org.mockito.Mockito;

または

static import org.mockito.Mockito.*;

MockitoクラスはMockitoのMatchersクラスを拡張するため、Matchersクラスまたはそれらの静的メソッドの間で競合が発生する可能性があります。 CoreMatchersを使用することで、JUnitから派生したCoreMatchersをMockitoと同じクラスで使用できます。使用時にそれらを完全修飾する必要はありません。

11
Kevin Welker

AndroidのJUnitテスト(接続されたテストではない)を使用する場合、CoreMatchersは、すでに含まれているjunitモジュール内で使用できるようですが、 Matchersはそうではありません。

したがって、オーバーヘッドを節約し、別のライブラリのインポートを避けるために、これらのクラスのCoreMatcherバージョンを使用することを検討してください。

assertThat(chrome.twiddle(), is(equalTo(0)));

CoreMatchers のみを使用して可能です。

1
serv-inc