2017-05-25 2 views
2

Ich bin neu mit Hamcrest. Während ich entdecke, wie man es benutzt, habe ich Zweifel darüber, wann man is oder equalTo verwenden sollte.Hamcrest Wann zu verwenden ist oder equalTo

Gibt es einen Unterschied zwischen is und equalTo, obwohl es konzeptuell oder gelegentlich ist? Es scheint sich gleich zu verhalten.

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

Warum würden Sie eine anstelle der anderen verwenden?

+1

'is' verwendet intern das' equalsTo'. Ich denke es ist hauptsächlich für bessere Lesbarkeit. –

Antwort

4

Die Javadoc für Matchers ist ziemlich klar. is in all seinen überladenen Formen ist für Ausdruckskraft da.

Der "main" is(Matcher<T> matcher)is ist, die:

andere Matcher Deco, sein Verhalten zu halten, aber ermöglichen Tests leicht ausdruck zu sein.

Zum Beispiel:

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

Statt:

assertThat(cheese, equalTo(smelly)) 

is(T value) ist:

Eine Verknüpfung zu den häufig verwendeten is(equalTo(x)).

erlauben assertThat(cheese, is(smelly))

... und is(java.lang.Class<T> type) ist:

Eine Verknüpfung zu dem häufig is(instanceOf(SomeClass.class)) verwendet.

erlauben assertThat(cheese, is(DairyFood.class))

... aber dies ist für isA(DairyFood.class) veraltet.


Was dies läuft darauf hinaus, dass is(foo) und equalTo(foo) in ihrem Verhalten genau äquivalent sind, so lange ist foo ist weder ein Matcher noch ein Class. Sie sollten das verwenden, was Sie am deutlichsten sagen.

1

Nach der Docs, is(Object obj) ist nur eine Abkürzung für is(equalTo(Object obj)), wo Sie is verwenden können, um aussagekräftigere Matcher zu komponieren.

Verwandte Themen