Кілька правильних результатів за допомогою Hamcrest (чи існує збіг?)


76

Я відносно новачок у матчах. Я граюся навколо з hamcrest у поєднанні з JUnit, і це мені подобається.

Чи є спосіб стверджувати, що один із кількох варіантів є правильним?

Щось на зразок

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

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

(Я відкритий для альтернативних варіантів)

Відповіді:


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

З підручника Hamcrest :

anyOf - збігається, якщо збігаються збіги, коротке замикання (наприклад, Java ||)

Див. Також Javadoc .

Більше того, ви можете написати власний Збірник, що зробити досить просто.


82

Маркос має рацію, але у вас є ще кілька варіантів. Перш за все, це або / або:

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

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

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

або якщо у вас вже є параметри в масиві / колекції:

assertThat(result, isIn(theCollection))

Див. Також Javadoc .


Хммм ... з якоїсь незрозумілої причини в моєму середовищі Eclipse (якому лише близько 6 місяців) є старовинна бібліотека Hamcrest, і я не отримую цих смаколиків.
CurtainDog

Ну, це assertThat((Set<String>)null, is(either(empty()).or(nullValue())));дає мені досить дивну помилку твердження: Expected: is (an empty collection or null) but: was nullдля гамресту 1.3...
Єзор

isOneOf (), здається, застаріло.
Джолта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.