2012-10-08 6 views

Respuesta

60

Una alternativa a la solución de Jeff es utilizar both:

assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L)))); 

Creo que es bastante fácil de leer. Usted también consigue un buen mensaje de error en caso de que el cheque no se pudo:

esperado: es (un valor mayor que < 50L> y un valor de menos de < 1658L>) tiene: < 50L>

+0

No he encontrado la importación de _both_ comunicado. ¿Alguien puede ayudar? –

+2

@CiganoMorrisonMendez Está en org.hamcrest.CoreMatchers –

+1

Gracias. No apareció para mí porque LambdaJ usa hamcrest-all-1.1, que no tiene esta implementación. Lo encontré en la versión 1.2 o superior. –

20

no creo between es parte de los comparadores hamcrest básicas, pero se puede hacer algo como esto:

assertThat(number, allOf(greaterThan(min),lessThan(max))); 

Eso todavía está un poco feo, por lo que podría crear un método de ayuda entre

assertThat(number, between(min,max)) 

y between parece

allOf(greaterThan(min),lessThan(max)) 

Todavía no es una solución fantástica, pero se lee como un matcrest matcher.

Si no puede encontrar uno que esté disponible públicamente, sería trivial escribir su propio between matcher http://code.google.com/p/hamcrest/wiki/Tutorial.

12

Si usted está tratando con números enteros, se debe considerar el uso del método de closeTo:

assertThat((double)nclient, is(closeTo(nserver, 1d))); 

por desgracia, no hay closeTo para enteros, pero el correo un entero de 32 bits es representable por un doble, por lo que puedes simplemente convertirlos a dobles y continuar.

Esto no es exactamente equivalente a between, pero a veces puede ser útil.

1

Otra opción es usar el Cirneco extension. Tiene between(), betweenInclusive() y más. Estos emparejadores también se aplican a otros objetos que implementa Comparable (como Date).

Siguiendo su ejemplo, será:

assertThat(50L, between(12L, 1658L)); 

y si quieres los dos límites que se incluirán:

assertThat(50L, betweenIncluded(12L, 1658L)); 

o si quieren sólo uno de los límites que se incluirán:

assertThat(50L, betweenLowerBoundIncluded(12L, 1658L)); 
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L)); 

Usted ca n utilizar la siguiente dependencia para un proyecto JDK7 compatible:

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java7-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 

o el siguiente si está utilizando JDK8

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java8-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 
Cuestiones relacionadas