这是嘲笑我的服务呼叫并返回假结果的方式:
when(myService.doSomething("",fakeRequestAsModel)) thenReturn fakeResult
val result = call(controller.myActionMethod(), request)
问题是在控制器方法myActionMethod
中,当我调用doSomething
并传递参数,我调用了一些只会在生产中返回某些东西的属性...
def myActionMethod() ... = {
myService.doSomething(request.getSomeValue,requestAsModel)
...
}
因此,getSomeValue
是我只能在生产中调用的方法,它带有第三方库,我不能覆盖它。
我仍然可以嘲笑这个电话,所以 request.getSomeValue
不会给我一个例外吗?
和 request.getSomeValue
是动态的,不幸的是,我不能将其放在配置中...
// we rename this because Scala defines `eq` on `AnyRef`
import org.mockito.Matchers.{eq => eqMockito, _}
...
when(myService.doSomething(anyString(), eqMockito(fakeRequestAsModel)))
thenReturn fakeResult
在这里,我们希望Mockito在发送任何字符串并确切的fakeRequestAsModel
时返回此答案,这是您想要的。
注意:
- 请注意不要将
any
匹配器与正常值混合,您不能说:when(myService.doSomething(anyString(), fakeRequestAsModel))
。
您需要用eqMockito()
方法包装正常值。 - 您可以将
any[classOf[T]]
用于类型的参数。 - 对隐性要格外小心。
希望它有帮助!