Hamcrest-Zahlenvergleich mit between

Lesezeit: 2 Minuten

Benutzer-Avatar
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.

Benutzer-Avatar
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 betweenkann aber manchmal hilfreich sein.

Benutzer-Avatar
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>

1089790cookie-checkHamcrest-Zahlenvergleich mit between

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

Privacy policy