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.