Я использую Mockito со ScalaTest.Рассмотрим этот упрощенный пример.
Класс кейса модели:
case class Batch(batchId: Long,
timestamp: Option[LocalDateTime] = Some(LocalDateTime.now),
invoicesReceived: Option[Int])
В моем тесте я высмеиваю класс с именем BatchRepository, в котором есть метод с такой сигнатурой:
def create(conn: Connection, batch: Batch): Long
Соответствующий бит тестового кода:
verify(batchRepository, times(1)).create(anyObject(),
Batch(anyLong(), anyObject(), Matchers.eq(Some(1))))
)
Говорят: : я хочу убедиться, что тестируемый код вызывает метод макетированного репозитория с любым подключением и экземпляром Batchс любым идентификатором и отметкой времени, но invoicesReceived
точно равен Some(1)
.
При использовании Mockito это вообще возможно, и если да, то как?
Рабочий код создает новую серию, которая устанавливает метку времени на текущий момент, поэтому я думаю, что это практически невозможносоздать реальный пакетный объект в тесте для вызова verify()
с точно такой же отметкой времени.Так что, по крайней мере, для временной метки мне понадобится anyObject()
.
Я перепробовал много вариантов, например, упаковал всю серию в Matchers.eq()
, но я не нашел ничего, что работает:
Неправильное использование сопоставителей аргументов!Ожидается 2 совпадения, 4 записано [...]
Я был бы рад услышать, что я неправильно использую совпадения, если окажется, что есть какой-то альтернативный способ использовать Mockito для проверки того, что яхочу.10
(мне было трудно написать хорошее название для этого вопроса; пожалуйста, отредактируйте или оставьте комментарий, если вы понимаете, о чем я спрашиваю, и можете выразить его более кратко.)