Mehrere richtige Ergebnisse mit Hamcrest (gibt es einen Oder-Matcher?)

Lesezeit: 2 Minuten

Benutzer-Avatar
Mo.

Ich bin relativ neu bei Matchern. Ich spiele damit herum Oberschenkel in Kombination mit JUnit und ich mag es irgendwie.

Gibt es eine Möglichkeit, anzugeben, dass eine von mehreren Auswahlmöglichkeiten richtig ist?

Etwas wie

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

Die Methode, die ich teste, gibt ein Element einer Sammlung zurück. Die Liste kann mehrere Kandidaten enthalten. Meine aktuelle Implementierung gibt den ersten Treffer zurück, aber das ist keine Voraussetzung. Ich möchte, dass mein Testfall erfolgreich ist, wenn einer der möglichen Kandidaten zurückgegeben wird. Wie würden Sie das in Java ausdrücken?

(Ich bin offen für Hamcrest-Alternativen)

Benutzer-Avatar
Marcospereira

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

Aus Hamcrest-Tutorial:

anyOf – Übereinstimmungen, wenn Übereinstimmungen übereinstimmen, Kurzschlüsse (wie Java ||)

Siehe auch Javadoc.

Außerdem könnten Sie Ihren eigenen Matcher schreiben, was ziemlich einfach ist.

Benutzer-Avatar
Tyler

marcos hat recht, aber du hast noch ein paar andere möglichkeiten. Zunächst einmal dort ist ein entweder/oder:

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

aber wenn Sie mehr als zwei Artikel haben, wird es wahrscheinlich unhandlich. Außerdem wird der Typechecker bei solchen Sachen manchmal komisch. Für Ihren Fall könnten Sie Folgendes tun:

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

oder wenn Sie Ihre Optionen bereits in einem Array/einer Sammlung haben:

assertThat(result, isIn(theCollection))

Siehe auch Javadoc.

  • Hmmm … aus irgendeinem unerklärlichen Grund hat meine Eclipse-Umgebung (die erst etwa 6 Monate alt ist) eine alte Hamcrest-Bibliothek und ich bekomme diese Leckereien nicht.

    – VorhangHund

    27. Juni 2012 um 6:50 Uhr

  • Brunnen, assertThat((Set<String>)null, is(either(empty()).or(nullValue()))); gibt mir einen ziemlich seltsamen Behauptungsfehler: Expected: is (an empty collection or null) but: was null für Hamster 1.3

    – Jesor

    5. April 2018 um 13:05 Uhr

  • isOneOf() scheint jetzt veraltet zu sein.

    – Ruck

    21. Februar 2020 um 15:06 Uhr

1225810cookie-checkMehrere richtige Ergebnisse mit Hamcrest (gibt es einen Oder-Matcher?)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy