Mockito returns null 而不是 Future.successful

Mockito returns null instead of Future.successful

我在将 Mockito 设置为 return a Future 时遇到了一点问题,它被映射到被测单元中。

有问题的存根方法是这样的:

when(urlRequest.post(any())).thenReturn(Future.successful(badOAuthResponse))

其中 badOAuthQuery 是在其他地方定义的 MapbadOAuthResponse 是在其他地方定义的模拟 WSResponse

调用它的相关行是:

val response = client.url(oAuthUrl).withHeaders(headers: _*).post(requestMap)

其中 client 是一个模拟的 WSClient,其方法在别处存根。

我已将问题缩小到 POST 请求附近的某个地方。通过调试器单步执行显示 .post() return 之前的所有先前方法调用都很好,但是单步执行该行,response 设置为 null.

之后 NullPointerException 实际被触发的行是:

response.map { resp =>

很明显问题是之前那行response设置为null,但是不知道为什么Mockito没有return成功Future 包含上面的模拟对象。

如有任何帮助,我们将不胜感激!谢谢!

好吧,经过一番摸索,我终于找到了问题所在。事实证明,我正在模拟的对象 (WSRequestHolder) 有两个名为 post 的方法:post(body: File)post[T](body: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T])。我曾假设我的 mock 是为后面的方法调用设置的,但事实证明我需要更明确地调用该方法,如下所示:

when(urlRequest.post[Map[String, Seq[String]]](any())(any(), any())
  .thenReturn(Future.successful(badOAuthResponse))