Несколько правильных результатов с помощью Hamcrest (есть или-матчер?)

Я отношусь к новичкам с соавторами. Я играю с hamcrest в сочетании с JUnit, и мне это нравится.

Есть ли способ указать, что правильный выбор одного из нескольких вариантов?

Что-то вроде

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

Метод, который я тестирую, возвращает один элемент коллекции. Список может содержать несколько кандидатов. Моя текущая реализация возвращает первый хит, но это не является обязательным требованием. Я бы хотел, чтобы мой тестовый файл был успешным, если какой-либо из возможных кандидатов возвращается. Как вы выразите это на Java?

(Я открыт для альтернатив hamcrest)

Ответ 1

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

Из Учебник по Hamcrest:

anyOf - соответствует, если совпадают совпадения, короткие замыкания (например, Java ||)

См. также Javadoc.

Кроме того, вы можете написать свой собственный Matcher, что довольно легко сделать.

Ответ 2

Маркос прав, но у вас есть пара других вариантов. Прежде всего, есть либо/или:

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

но если у вас есть более двух элементов, это, вероятно, станет громоздким. Плюс, typechecker иногда бывает странным в таких вещах. Для вашего случая вы можете сделать:

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

или если у вас уже есть свои параметры в массиве /Collection:

assertThat(result, isIn(theCollection))

См. также Javadoc.