Gibt es einen Weg in Hamcrest, um eine Zahl innerhalb eines Zahlenbereichs zu vergleichen? Ich bin auf der Suche nach so etwas wie folgt aus:Hamcrest Nummer Vergleich zwischen
assertThat(50L, is(between(12L, 1658L)));
Gibt es einen Weg in Hamcrest, um eine Zahl innerhalb eines Zahlenbereichs zu vergleichen? Ich bin auf der Suche nach so etwas wie folgt aus:Hamcrest Nummer Vergleich zwischen
assertThat(50L, is(between(12L, 1658L)));
Eine Alternative zu Jeffs Lösung ist both
zu verwenden:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Ich denke, dass gut lesbar ist. Sie erhalten auch eine gute Fehlermeldung bei der Prüfung fehlgeschlagen:
Erwartet: ist (ein Wert größer als < 50L> und einen Wert von weniger als < 1658L>) bekam: < 50L>
Ich glaube nicht, between
Teil der Kern hamcrest Matcher ist, aber man konnte so etwas tun:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
Das ist immer noch ein wenig hässlich, so könnte man eine Hilfsmethode zwischen
assertThat(number, between(min,max))
und between
erstellen sieht aus wie
allOf(greaterThan(min),lessThan(max))
Immer noch keine fantastische Lösung, aber es liest sich wie ein Hamcrest Matcher.
Wenn Sie keinen finden, der öffentlich verfügbar ist, wäre es trivial, Ihren eigenen between
Matcher http://code.google.com/p/hamcrest/wiki/Tutorial zu schreiben.
Wenn Sie mit ganzen Zahlen zu tun haben, sollten Sie die closeTo
Methode betrachten:
assertThat((double)nclient, is(closeTo(nserver, 1d)));
leider für ganze Zahlen keine closeTo
ist, aber e sehr 32-Bit-Integer ist durch ein Double darstellbar, so dass Sie sie einfach auf Doppelgänger werfen und weitermachen können.
Dies ist nicht genau between
, kann aber manchmal hilfreich sein.
Eine weitere Option ist die Verwendung der Cirneco extension. Es hat between()
, betweenInclusive()
und mehr. Diese Matcher gelten auch für andere Objekte, die Comparable
implementieren (wie Date
).
Ihrem Beispiel folgend, wird es sein:
assertThat(50L, between(12L, 1658L));
und wenn Sie möchten die beiden Grenzen subsumieren:
assertThat(50L, betweenIncluded(12L, 1658L));
oder wenn Sie wollen nur eine der Grenzen enthalten sein:
assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));
Sie ca n Verwenden Sie die folgende Abhängigkeit für ein JDK7-konformes Projekt:
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
oder die folgende, wenn Sie mit JDK8
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
ich nicht den Import für _both_ Erklärung gefunden habe. Kann jemand helfen? –
@CiganoMorrisonMendez Es ist in org.hamcrest.CoreMatchers –
Danke. Es erschien nicht für mich, weil LambdaJ Hamcrest-All-1.1 verwendet, die diese Implementierung nicht hat. Ich habe es bei Version 1.2 oder höher gefunden. –