使用Scalatest/Mockiton模拟动态类方法参数



这是嘲笑我的服务呼叫并返回假结果的方式:

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时返回此答案,这是您想要的。


注意:

  1. 请注意不要将any匹配器与正常值混合,您不能说: when(myService.doSomething(anyString(), fakeRequestAsModel))
    您需要用eqMockito()方法包装正常值。
  2. 您可以将any[classOf[T]]用于类型的参数。
  3. 对隐性要格外小心。

希望它有帮助!

最新更新