0

我在 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
4

0 回答 0