Plusieurs résultats corrects avec Hamcrest (y a-t-il un or-matcher?)

Je suis relativement nouveau pour les matchers. Je joue avec le hamcrest en combinaison avec JUnit et je l’aime bien.

Y a-t-il un moyen d’affirmer que l’un des choix multiples est correct?

Quelque chose comme

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

La méthode que je teste renvoie un élément d’une collection. La liste peut contenir plusieurs candidats. Mon implémentation actuelle renvoie le premier hit, mais ce n’est pas obligatoire. Je voudrais que mon testament réussisse si l’un des candidats possibles est retourné. Comment exprimeriez-vous cela en Java?

(Je suis ouvert aux alternatives au hamcrest)

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

Du tutoriel Hamcrest :

anyOf – correspond à des correspondances, des courts-circuits (comme Java ||)

Voir aussi Javadoc .

De plus, vous pourriez écrire votre propre Matcher, ce qui est assez facile à faire.

Marcos a raison, mais vous avez deux autres options également. Tout d’abord, il y a un / ou:

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

mais si vous avez plus de deux articles, cela deviendrait probablement difficile à manier. De plus, le typechecker devient bizarre sur des choses comme ça parfois. Pour votre cas, vous pourriez faire:

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

ou si vous avez déjà vos options dans un tableau / collection:

 assertThat(result, isIn(theCollection)) 

Voir aussi Javadoc .