我是新手使用hamcrest。当我发现如何使用它时,我一直怀疑何时使用is
或equalTo
。
is
和equalTo
之间是否存在差异,尽管它在概念上或偶然上都有?它似乎行为相同。
Assert.assertThat(actual, equalTo("blue"));
Assert.assertThat(actual, is("red"));
为什么你会使用一个而不是另一个?
答案 0 :(得分:13)
Matchers
的Javadoc非常清楚。所有重载形式的is
都是为了表达。
" main" 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
}。你应该使用你认为最清楚地传达你意图的那个。
答案 1 :(得分:1)
根据Docs,is(Object obj)
只是is(equalTo(Object obj))
的快捷方式,您可以使用is
来构建更具表现力的匹配器。