У меня есть тестируемый метод, который возвращает список объектов ... например, объект «Person».
У меня есть список «Ожидаемые имена» для проверки результата.
В настоящее время у меня есть рабочий тест, который перебирает имена в «Ожидаемые имена» и утверждает, что каждый из них содержится в списке объектов «Персона».Вот так (учтите, что следующий фрагмент кода есть в Kotlin):
expectedLastNames.forEach { expectedLastName ->
assertThat(listOfPeople, hasItem(hasProperty("lastName", `is`(expectedLastName.trim()))))
}
Это прекрасно работает, когда утверждение проходит, и проверяет мой метод.Тем не менее, это очень громоздко, когда тест не пройден, потому что он быстро проваливается, как только встречает пропущенное имя и не утверждает остальные имена.Я бы предпочел улучшить свое утверждение, чтобы сообщать обо всех пропущенных именах одновременно, а не по одному за раз.
Что-то вроде:
assertThat(expectedLastNames, allItems(lastNameMatches(listOfPeople)));
Я хочу, чтобы мое сообщение assertionFailure былочто-то вроде:
Ожидается, что список, соответствующий всем «Смит, Джонс, Дэвис», но [«Смит», «Дэвис»] не найден в «Person [firstName = John, lastName =»Джонс "], Person [firstName = Sarah, lastName = Jones]"
Если в результатах присутствуют дополнительные объекты Person со значениями lastName, которые не включены в "Ожидаемые имена_посланий", это все равно должно пройти какПока ВСЕ имена из «Ожидаемые имена» представлены в результатах.
Также важно знать, что это параметризованный тест Junit5, а «ожидаемые имена» - один из передаваемых параметров.в. Так что я не могу просто жестко закодировать фамилии в утверждении.
Есть ли средство сопоставления коллекции Hamcrest, которое будет делать то, что я хочу?Или, если нет, кто-нибудь может заставить меня начать с нестандартного сопоставителя, который это сделает?
Любая помощь приветствуется.