74

hamcrestorg.hamcrest.Matchersクラスは に非常に似てorg.hamcrest.CoreMatchersいるように見えます (Matchersもっとあるように見えますが)。なぜ使用することを選択するのですかCoreMatchers(クラスがわずかに小さいように見えることを除いて)、これら 2 つのクラスが非常に似ているのはなぜですか?

4

3 に答える 3

56

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

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

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

これにより、テスト メソッドが最も読みやすくなります。

于 2012-06-08T20:45:58.693 に答える
11

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

import org.mockito.Mockito;

また

static import org.mockito.Mockito.*;

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

于 2013-03-19T22:23:45.863 に答える