2012-03-15 22 views
9

Viniendo a Java desde Python. Reconozco que esto es bastante básico, pero no parece que esto se haya preguntado aquí todavía y Google está siendo tímido conmigo.En una prueba de unidad de Java, ¿cómo afirmo que un número está dentro de un rango determinado?

En Python, simplemente me gustaría hacer algo como esto, pero los objetos de Java:

assertTrue(min <= mynum and mynum <= max); 
+0

porque 'y' no es una palabra clave de Java. Quieres '&&'. –

+1

Ah, sí. 'import static org.junit.Assert.assertTrue' también ayudó. ¡Gracias a todos! – klenwell

Respuesta

13

que escribiría:

assertTrue("mynum is out of range: " + mynum, min <= mynum && mynum <= max); 

pero técnicamente que sólo necesito:

assertTrue(min <= mynum && mynum <= max); 

De cualquier manera, asegúrese de escribir && y no and.

1

assertTrue(min <= mynum && mynum <= max, "not in range");

el comentario al final es opcional. Básicamente lo mismo que la versión de Python, excepto el &&.

1

Use && en lugar de and; Aparte de eso, lo que escribiste debería funcionar.

3

También puede utilizar la biblioteca Hamcrest, esto es más fácil de leer.

assertThat(mynum,greaterThanOrEqualTo(min)); 

assertThat(mynum,lessThanOrEqualTo(max)); 

No sé si esas dos líneas se pueden combinar.

2

Extendiendo en this respuesta: puede combinar los dos con allOf.

assertThat(mynum, allOf(greaterThanOrEqualTo(min),lessThanOrEqualTo(max))); 

El equivalente en quirófano en Hamcrest es anyOf.

1

Si utiliza AssertJ se vuelve aun más legible:

assertThat(mynum).isGreaterThanOrEqualTo(min).isLessThanOrEqualTo(max); 

Además, el AssertionError mejor que la versión assertTrue ya que no es necesario proporcionar una descripción, por ejemplo:

java.lang.AssertionError: 
Expecting: 
<10> 
to be less than or equal to: 
<42> 

Si está utilizando Java 8 y AssertJ 3.0.0, puede usar una lambda para especificarlo:

assertThat(mynum).matches(actual -> actual >= min && actual <= max); 
+0

¿Cómo se puede leer ese error? 10 es menor o igual a 42, por lo que es confuso. – clcto

+2

I que la afirmación se lee de forma más natural en comparación con las versiones 'assertTrue' y Hamcrest. – Jonathan

7

voy a utilizar AssertJ como dijo Jonathan, pero con afirmaciones simples :)

assertThat(mynum).isBetween(min, max); 

Creo que esta es la solución más fresco :)

Cuestiones relacionadas