Pregunta

Soy relativamente nuevo para los emparejadores. Estoy jugando con hamcrest en combinación con JUnit y me gusta.

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

Algo como

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

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

(Estoy abierto a las alternativas de hamcrest)

¿Fue útil?

Solución

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

De Tutorial de Hamcrest :

  

anyOf: coincide si coinciden algunos coincidentes, cortocircuitos (como Java ||)

Ver también Javadoc .

Además, puedes escribir tu propio Matcher, lo que es bastante fácil de hacer.

Otros consejos

Marcos tiene razón, pero también tienes otras opciones. En primer lugar, hay uno o dos:

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

pero si tiene más de dos elementos, probablemente se volverá difícil de manejar. Además, el typechecker se vuelve extraño en cosas así a veces. Para su caso, usted podría hacer:

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

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

assertThat(result, isIn(theCollection))

Consulte también Javadoc .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top