2008-09-30 9 views
61

Soy relativamente nuevo en matchers. Estoy jugando con hamcrest en combinación con JUnit y me gusta un poco.Múltiples resultados correctos con Hamcrest (¿hay un or-matcher?)

¿Hay alguna manera de afirmar que una de las múltiples opciones es la correcta?

Algo así como

assertThat(result, is(either(1, or(2, or(3))))) //does not work in hamcrest 

El método que estoy probando vuelve uno de los elementos de una colección. La lista puede contener múltiples candidatos. Mi implementación actual devuelve el primer golpe, pero eso no es un requisito. Me gustaría que mi testcase tenga éxito, si se devuelve alguno de los posibles candidatos. ¿Cómo expresarías esto en Java?

(estoy abierto a hamcrest-alternatives)

Respuesta

91
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3))) 

De Hamcrest tutorial:

anyOf - Coincide si alguna comparadores coinciden, circuitos cortos (como Java ||)

Véase también Javadoc.

Además, podría escribir su propio Matcher, lo que es bastante fácil de hacer.

71

marcos tiene razón, pero usted tiene un par de otras opciones también. En primer lugar, hay es un either/or:

assertThat(result, either(is(1)).or(is(2))); 

pero si usted tiene más de dos artículos que probablemente tendría poco manejable. Además, el typechecker se pone raro en cosas como eso a veces. Para su caso, se podría hacer:

assertThat(result, isOneOf(1, 2, 3)) 

o si ya tiene sus opciones en una matriz/Colección:

assertThat(result, isIn(theCollection)) 

Ver también Javadoc.

+0

Hmmm ... por alguna razón inexplicable, mi entorno Eclipse (que tiene solo unos 6 meses) tiene una antigua biblioteca de Hamcrest y no recibo estos artículos. – CurtainDog

Cuestiones relacionadas