Hamcrestのorg.hamcrest.Matchers
クラスはorg.hamcrest.CoreMatchers
に非常に似ているようです(Matchers
の方が多いようです)。なぜ私はCoreMatchers
を使用することを選択しますか(クラスが少し小さいように見えることを除いて)、なぜこれら2つのクラスは非常に似ているのですか?
Hamcrestマッチャーは、いくつかのモジュールに分割されています。 「コア」には、他のマッチャーの構築に必要な最も基本的なマッチャーと抽象クラスが含まれています。 org.hamcrest.CoreMatchers
には、これらのマッチャーのみのファクトリメソッドが含まれています。他のマッチャーは、一致するオブジェクトのタイプによってグループ化された「ライブラリ」モジュールにあり、オプションです。 org.hamcrest.Matchers
には、両方のマッチャーセットが含まれます。
あなたはどちらを使うべきですか?問題なくすべてを後者から静的にインポートします。おそらくコンパイル時間が少し長くかかるかもしれませんが、それは私にとって決して問題ではありませんでした。 JUnitインポートに加えて、これをユニットテストの一番上に配置します。
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
これにより、テスト方法で最も読みやすくなります。
(私と同じように)Mockitoを頻繁に使用している場合は、次のことを行っている可能性があります。
import org.mockito.Mockito;
または
static import org.mockito.Mockito.*;
Mockito
クラスはMockitoのMatchers
クラスを拡張するため、Matchersクラスまたはそれらの静的メソッドの間で競合が発生する可能性があります。 CoreMatchersを使用することで、JUnitから派生したCoreMatchersをMockitoと同じクラスで使用できます。使用時にそれらを完全修飾する必要はありません。
AndroidのJUnitテスト(接続されたテストではない)を使用する場合、CoreMatcher
sは、すでに含まれているjunitモジュール内で使用できるようですが、 Matchers
はそうではありません。
したがって、オーバーヘッドを節約し、別のライブラリのインポートを避けるために、これらのクラスのCoreMatcher
バージョンを使用することを検討してください。
assertThat(chrome.twiddle(), is(equalTo(0)));
CoreMatcher
s のみを使用して可能です。