Existe-t-il un moyen dans Hamcrest de comparer un nombre dans une plage de nombres? Je cherche quelque chose comme ça:
assertThat(50L, is(between(12L, 1658L)));
Une alternative à la solution de Jeff consiste à utiliser both
:
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
Je pense que c'est assez lisible. Vous obtenez également un bon message d'erreur en cas d'échec de la vérification:
Attendu: est (une valeur supérieure à <50L> et une valeur inférieure à <1658L>) obtenu: <50L>
Je ne crois pas que between
fait partie des principaux matchers hamcrest, mais vous pouvez faire quelque chose comme ceci:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
C'est encore un peu moche, vous pouvez donc créer une méthode d'aide entre
assertThat(number, between(min,max))
et between
ressemble
allOf(greaterThan(min),lessThan(max))
Ce n'est toujours pas une solution fantastique, mais ça se lit comme un match nul.
Si vous ne trouvez pas celui qui est accessible au public, il serait trivial d'écrire votre propre between
matcher http://code.google.com/p/hamcrest/wiki/Tutorial .
Si vous avez affaire à des entiers, vous devriez envisager d'utiliser la méthode closeTo
:
assertThat((double)nclient, is(closeTo(nserver, 1d)));
malheureusement, il n'y a pas de closeTo
pour les entiers, mais chaque entier 32 bits est représentable par un double, vous pouvez donc simplement les convertir en doubles et continuer.
Ce n'est pas exactement équivalent à between
, mais peut parfois être utile.
Une autre option consiste à utiliser extension Cirneco . Il a between()
, betweenInclusive()
et plus encore. Ces matchers s'appliquent également à d'autres objets qui implémentent Comparable
(comme Date
).
Suivant votre exemple, ce sera:
assertThat(50L, between(12L, 1658L));
et si vous voulez que les deux limites soient incluses:
assertThat(50L, betweenIncluded(12L, 1658L));
ou si vous souhaitez inclure une seule des limites:
assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));
Vous pouvez utiliser la dépendance suivante pour un projet compatible JDK7:
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>Java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
ou ce qui suit si vous utilisez JDK8
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>Java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>