Plusieurs résultats corrects avec Hamcrest (existe-t-il un or-matcher?)
Question
Je suis relativement nouveau pour les matchers. Je bricole avec hamcrest en combinaison avec JUnit et moi, je l'aime bien.
Existe-t-il un moyen d'indiquer qu'un choix parmi plusieurs 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 résultat, mais ce n'est pas une exigence. J'aimerais que mon test soit un succès, si l'un des candidats possibles est renvoyé. Comment exprimeriez-vous cela en Java?
(Je suis ouvert aux alternatives de hamcrest)
La solution
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))
De didacticiel Hamcrest :
anyOf - correspond si des correspondants correspondent, des circuits courts (comme Java ||)
Voir aussi Javadoc .
De plus, vous pouvez écrire votre propre Matcher, ce qui est assez facile à faire.
Autres conseils
Marcos a raison, mais vous avez également deux autres options. Tout d’abord, il y a un / ou:
assertThat(result, either(is(1)).or(is(2)));
mais si vous avez plus de deux éléments, cela deviendra probablement difficile à manier. De plus, le vérificateur de typage devient parfois bizarre avec ce genre de choses. 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 .