Gibt es in Hamcrest eine Möglichkeit, eine Zahl innerhalb eines Zahlenbereichs zu vergleichen? Ich suche sowas:
assertThat(50L, is(between(12L, 1658L)));
sah303
Gibt es in Hamcrest eine Möglichkeit, eine Zahl innerhalb eines Zahlenbereichs zu vergleichen? Ich suche sowas:
assertThat(50L, is(between(12L, 1658L)));
Eine Alternative zu Jeffs Lösung ist zu verwenden both
:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Ich finde das durchaus lesenswert. Sie erhalten auch eine gute Fehlermeldung, falls die Überprüfung fehlgeschlagen ist:
Erwartet: ist (ein Wert größer als <50L> und ein Wert kleiner als <1658L>) hat: <50L>
Ich habe den Import für nicht gefunden beide Aussage. Kann jemand helfen?
– Leonel Sanches da Silva
20. Juni 2013 um 19:44 Uhr
@CiganoMorrisonMendez Es befindet sich in org.hamcrest.CoreMatchers
– Christoph Leiter
21. Juni 2013 um 9:34 Uhr
Vielen Dank. Es wurde mir nicht angezeigt, weil LambdaJ hamcrest-all-1.1 verwendet, das diese Implementierung nicht hat. Ich habe es in Version 1.2 oder höher gefunden.
– Leonel Sanches da Silva
21. Juni 2013 um 18:18 Uhr
Dies funktioniert auch gut mit java.util.Date-Vergleichen, da Date Comparable implementiert
– GameSalutes
21. August 2017 um 21:07 Uhr
Ich glaube nicht between
ist Teil der Kern-Hamcrest-Matcher, aber Sie könnten so etwas tun:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
Das ist immer noch ein wenig hässlich, also könnten Sie eine Hilfsmethode dazwischen erstellen
assertThat(number, between(min,max))
und between
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 können, der öffentlich verfügbar ist, wäre es trivial, einen eigenen zu schreiben between
Matcher http://code.google.com/p/hamcrest/wiki/Tutorial.
Elazar Leibowitsch
Wenn Sie mit ganzen Zahlen arbeiten, sollten Sie die Verwendung von in Betracht ziehen closeTo
Methode:
assertThat((double)nclient, is(closeTo(nserver, 1d)));
leider gibt es keine closeTo
für Ganzzahlen, aber jede 32-Bit-Ganzzahl ist durch ein Double darstellbar, sodass Sie sie einfach in Doubles umwandeln und weitermachen können.
Dies ist nicht genau gleichbedeutend mit between
kann aber manchmal hilfreich sein.
Jean Valjean
Eine weitere Möglichkeit ist die Verwendung von Cirneco-Erweiterung. Es hat between()
, betweenInclusive()
und mehr. Diese Matcher gelten auch für andere implementierte Objekte Comparable
(wie Date
).
Nach Ihrem Beispiel wird es sein:
assertThat(50L, between(12L, 1658L));
und wenn Sie möchten, dass die beiden Grenzen enthalten sind:
assertThat(50L, betweenIncluded(12L, 1658L));
oder wenn Sie möchten, dass nur eine der Grenzen eingeschlossen wird:
assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));
Sie können die folgende Abhängigkeit für ein JDK7-kompatibles Projekt verwenden:
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
oder Folgendes, wenn Sie JDK8 verwenden
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>