Несколько правильных результатов с Hamcrest (есть ли совпадение или совпадение?)

StackOverflow https://stackoverflow.com/questions/152714

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

Что-то вроде

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

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

(Я открыт для альтернатив подколенных суставов)

Это было полезно?

Решение

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

От Учебное пособие по Hamcrest:

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

Смотрите также Javadoc.

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

Другие советы

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

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

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

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

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

assertThat(result, isIn(theCollection))

Смотрите также Javadoc.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top