Несколько правильных результатов с Hamcrest (есть ли or-matcher?) - PullRequest
68 голосов
/ 30 сентября 2008

Я относительно новичок в матчах. Я играю с подголовником в сочетании с JUnit, и мне это нравится.

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

Что-то вроде

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

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

(я открыт для альтернативы Хэмкресту)

Ответы [ 2 ]

104 голосов
/ 30 сентября 2008
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))

Из Урок Hamcrest :

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

См. Также Javadoc .

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

77 голосов
/ 02 июля 2011

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

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

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

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

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

assertThat(result, isIn(theCollection))

См. Также Javadoc .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...