Hamcrest когда использовать или equalTo

Я новичок в использовании hamcrest. Пока я открываю, как его использовать, у меня были сомнения в том, когда использовать is или equalTo.

есть ли разница между is и equalTo, хотя это концептуально или иногда? Кажется, он ведет себя так же.

 Assert.assertThat(actual, equalTo("blue"));
 Assert.assertThat(actual, is("red"));

почему вы должны использовать один вместо другого?

2 ответов


Javadoc для Matchers довольно ясно. is во всех его перегруженных формах есть для выразительности.

"основные" is is is(Matcher<T> matcher) которых:

украшает другой Matcher, сохраняя свое поведение, но позволяя тестам быть немного более выразительными.

например:

assertThat(cheese, is(equalTo(smelly)))

вместо:

assertThat(cheese, equalTo(smelly))

is(T value) - это:

ярлык для часто используется is(equalTo(x)).

позволяет assertThat(cheese, is(smelly))

... и is(java.lang.Class<T> type) - это:

ярлык для часто используемых is(instanceOf(SomeClass.class)).

позволяет assertThat(cheese, is(DairyFood.class))

... но это осуждается в пользу isA(DairyFood.class).


что это сводится к тому, что is(foo) и equalTo(foo) точно эквивалентны в своем поведении, пока foo ни Matcher или Class. Вы должны использовать то, что, по вашему мнению, наиболее ясно передает ваше намерение.


По словам Docs, is(Object obj) - Это просто ярлык для is(equalTo(Object obj)), где вы можете использовать is составить более выразительные matchers.