Я столкнулся с интересной проблемой при использовании поддержки макетов в Groovy для тестирования совместной работы с зависимостями.У нас есть два класса (пример):
class Dependency {
void method() {
throw new OperationNotSupportedException()
}
}
class Dependent {
Dependency dependency
void useDependency() {
dependency.with { method() }
}
}
Обратите внимание на то, как вызывается метод () для зависимости - это делается внутри метода зависимости "with".
Мне нужнофиктивный вызов метода () в тесте, поэтому моей первой попыткой было сделать что-то вроде этого:
class IgnoringWithTest {
@Test
void testWithMock() {
def depMock = new MockFor(Dependency)
Dependent dep = new Dependent()
depMock.demand.method { }
dep.dependency = depMock.proxyInstance()
dep.useDependency()
depMock.verify dep.dependency
}
}
К сожалению, этот «наивный» подход приводит к появлению сообщения об ошибке во время выполнения теста «Не ожидается вызова с помощьюэтот момент. Тем не менее 1 вызов (ы) для «метода» ожидается ".Это нормально, так как мы действительно пытаемся вызвать метод () для зависимости здесь.
Я попытался игнорировать вызов метода with (), добавив следующую строку:
depMock.ignore('with')
После этого я не получал жалоб на вызовы метода with (), однако оказалось, что ожиданиеЗаявленное использование спроса было проигнорировано.В результате я получил OperationNotSupportedException.
И теперь возникает вопрос - как сделать mock для метода () без проблем, когда в реализации он будет вызван в замыкании, переданном with ()?