Я поднял поддельную проблему на mockito- scala: https://github.com/mockito/mockito-scala/issues/191 Но я все еще застрял с моей проблемой.
Так что, в принципе, я прорезал ответы для одного метода. Я уверен, что этот метод выполняется с правильными параметрами (в него входит режим отладки):
val mocked = mock[Service]
mocked.execute(*, *, *) answers {(f:Parameter, s:Parameter, t:Parameter) =>
s match {
case _:SecondParameter => // Debug mode enter here
Right("Second")
case o => Left(o)
}
})
Затем я проверяю с очень широкой проверкой: mocked.method(*, *, *) wasCalled atLeastOnce
, но мой тест не пройден:
Wanted but not invoked:
mocked.method(
<any>,
<any>,
<any>
);
-> at **hidden**
However, there were exactly 4 interactions with this mock:
mocked.init();
-> at **hidden**
mocked.method(
FirstParameter,
SecondParameter,
ThirdParameter
);
-> at **hidden**
mocked.method(
FirstParameter,
OtherParameter,
ThirdParameter
);
-> at **hidden**
mocked.method(
FirstParameter,
YetAnotherParameter,
ThirdParameter
);
-> at **hidden**
Редактировать 1: Существует класс между mock[Service]
и испытуемым. Может ли это быть причиной этой проблемы?
class ServiceProxy(service: Service) {
def execute(p:Parameter) = Future {
val state = service.init()
service.execute(state, p, new ThirdParameter())
}
}
class Subject(proxy:ServiceProxy) {
def doSomething(s:String, n:Int) = {
val parameter = createParameter(s, n)
proxy.execute(parameter)
}
}
// In my test case
val mocked = mock[Service]
mocked.init() returns mock[State]
mocked.execute(*, *, *) answers // Same as above
val subject = new Subject(new ServiceProxy(mocked))
val response = subject.doSomething("A", 1)
Await.result(response, Duration.Inf)
mocked.method(*, *, *) wasCalled atLeastOnce