TL; DR ; Я хочу написать настраиваемый Matcher для использования с простым объектом типа POJO (у которого есть несколько полей). Метод describeTo
должен описывать, какое из полей не удалось сопоставить и почему.
Хорошо ... предполагая, что у меня есть что-то вроде: data class Person(val name: String, val age: Int)
Как мне написать собственный сопоставитель, который Я могу использовать для тестирования Person
в модульном тесте.
Например, тест пройдет, если я напишу что-то вроде
val person = Person("Bob", 5)
MatcherAssert.assertThat(person, PersonMatcher.hasValues("Bob", 5))
, но если я сделаю что-то вроде
val person = Person("Bob", 5)
MatcherAssert.assertThat(person, PersonMatcher.hasValues("Sue", 5))
, тогда я получу сообщение об ошибке, которое сообщает мне, какое поле не удалось.
java.lang.AssertionError:
Expected: Person.name is "Sue"
but: was "Bob"
Думаю, мне нужно понять жизненный цикл Matcher в контексте утверждения ... Т.е. когда matchesSafely
и describeTo
вызывается ...
Пожалуйста, не указывайте мне только на стандартные блоги TypeSafeMatcher (например, Baeldung ). Они не объясняют, как реализовать Matcher для многопольных объектов. Может быть, есть другой сопоставитель, который сделает то, что я хочу.
Наконец: я понимаю, что могу просто расширить org.assertj.core.api.AbstractAssert
, но я хотел использовать парадигму Hamcrest Matcher, если это возможно.