Frage

Ich bin relativ neu in Matcher. Ich bin Herumspielen mit hamcrest in Kombination mit JUnit und ich irgendwie wie es.

Gibt es eine Möglichkeit, zu behaupten, dass eine von mehreren Optionen korrekt ist?

So etwas wie

assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest

Die Methode Ich teste kehrt ein Element aus einer Sammlung. Die Liste kann mehrere Kandidaten enthalten. Meine aktuelle Implementierung gibt den ersten Treffer, aber das ist keine Voraussetzung. Ich würde mein Testfall erfolgreich sein möchte, wenn eine der möglichen Kandidaten zurückgeführt wird. Wie würden Sie diese in Java ausdrücken?

(Ich bin offen für hamcrest-Alternativen)

War es hilfreich?

Lösung

assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))

hamcrest Tutorial :

  

Bestimmungen haften - passend, wenn irgendwelche Matcher übereinstimmen, Kurzschluss (wie Java ||)

Siehe auch Javadoc .

Darüber hinaus können Sie Ihren eigenen Matcher schreiben können, was ist recht einfach zu tun.

Andere Tipps

marcos ist richtig, aber Sie haben auch ein paar andere Optionen. Zunächst einmal gibt es ist ein entweder / oder:

assertThat(result, either(is(1)).or(is(2)));

, aber wenn Sie mehr als zwei Elemente haben wäre es wahrscheinlich unhandlich bekommen. Außerdem bekommt die typechecker seltsam auf Sachen wie das manchmal. Für Ihren Fall könnten Sie tun:

assertThat(result, isOneOf(1, 2, 3))

oder wenn Sie bereits über Ihre Möglichkeiten in einem Array / Sammlung:

assertThat(result, isIn(theCollection))

Siehe auch Javadoc .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top