Несколько правильных результатов с помощью 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.