pom org matchers matcherassert libreria framework equalto dependency corematchers containsstring assertequals java junit hamcrest matcher

org - libreria hamcrest java



Múltiples resultados correctos con Hamcrest(¿hay un or-matcher?) (2)

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

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

Algo como

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

El método que estoy probando arroja un elemento 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-alternativas)


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

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

pero si tiene más de dos artículos, probablemente se vuelva difícil de manejar. Además, el typechecker se pone raro en cosas como eso a veces. Para su caso, 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 .


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

Desde el tutorial de Hamcrest :

anyOf: coincide con coincidencias de cualquier emparejamiento, cortocircuitos (como Java ||)

Ver también Javadoc .

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