Hamcrest 何时使用 Is 或 equalTo

2022-09-02 03:43:56

我是新来的,使用hamcrest。虽然我发现如何使用它,但我一直怀疑何时使用或.isequalTo

和 之间是否有任何区别,尽管它在概念上或从概念上是有区别的?它的行为似乎相同。isequalTo

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

为什么你会使用一个而不是另一个?


答案 1

Javadoc 非常清楚。 在其所有超载形式中,都是为了表现力。Matchersis

“主要”是:isis(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)


这可以归结为,只要既不是 a 也不是 .你应该使用任何你认为最清楚地传达你意图的人。is(foo)equalTo(foo)fooMatcherClass


答案 2

根据文档,这只是 的快捷方式,您可以在其中用于撰写更具表现力的匹配器。is(Object obj)is(equalTo(Object obj))is


推荐