mockito- scala проверка вызова метода - PullRequest
0 голосов
/ 09 января 2020

Я поднял поддельную проблему на 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
...