【发布时间】:2017-08-04 17:31:18
【问题描述】:
我在让 Mockito 返回一个Future 时遇到了一点问题,该Future 被映射到被测单元中。
有问题的存根方法是这样的:
when(urlRequest.post(any())).thenReturn(Future.successful(badOAuthResponse))
其中badOAuthQuery 是在别处定义的Map,badOAuthResponse 是在别处定义的模拟WSResponse。
调用它的有问题的行是:
val response = client.url(oAuthUrl).withHeaders(headers: _*).post(requestMap)
其中client 是一个模拟的WSClient,其方法在其他地方存根。
我已将问题范围缩小到 POST 请求周围的某个地方。单步调试器显示.post() 之前的所有先前方法调用都返回正常,但越过该行,response 设置为null。
之后的那一行,NullPointerException 实际被触发的地方是这样的:
response.map { resp =>
显然问题是response在之前的行中被设置为null,但我不知道为什么Mockito没有返回一个成功的Future包含上面的模拟对象。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
您确定
badOAuthQuery与requestMap相同(即,调用badOAuthQuery.equals(requestMap)返回true)?我怀疑不是这样,当你看到这样的模拟返回null时,这通常是问题(因为当你没有显式存根时,Mockito 模拟默认返回空值)。 -
嗯,我又看了一遍,觉得可能是这个问题。我尝试改用
when(urlRequest.post(any())).thenReturn(Future.successful(badOAuthResponse))并稍后修复细节,但我仍然遇到相同的null问题。 -
client.url(oAuthUrl).withHeaders(headers: _*)是否返回urlRequest? -
在这种情况下,客户端是具有以下模拟方法的 wsClient 模拟:
when(wsClient.url(any())).thenReturn(urlRequest) when(urlRequest.withHeaders(any())).thenReturn(urlRequest) when(urlRequest.post(any())).thenReturn(Future.successful(badOAuthResponse))
标签: scala mockito playframework-2.3