我是Scala的新手,正在为Scala中的Play应用程序编写一些测试。 Play应用程序已经用Java编写。
我有一个具有一个公共方法进程的RefreshService
public RefreshResponse process(RefreshRequest request) throws Exception {
return this.oauthService.token(request.oauthUrl, request.clientId, request.clientSecret, request.refreshToken)
.thenCompose(oauthToken -> this.processHelper(request.withOAuthToken(oauthToken)))
.get();
}
将操作在另一个包中定义为POJO
我已经根据Scala指南编写了我的测试
尝试模拟此服务时,我使用了以下代码
var mockRefreshService = mock[RefreshService]
when(mockRefreshService.process(_: RefreshRequest))
thenReturn (new RefreshResponse)
我从Scala得到以下编译器错误,无法弄清楚类型是如何模糊的
[error] /home/joey/Projects/sntdb/test/controllers/ApiControllerSpec.scala:31:重载的方法值然后返回替代方案:
[error](x $ 1:actions.RefreshRequest => actions.RefreshResponse,x $ 2:actions.RefreshRequest => actions.RefreshResponse *)org.mockito.stubbing.OngoingStubbing [actions.RefreshRequest => actions.RefreshResponse]
[error](x $ 1:actions.RefreshRequest => actions.RefreshResponse)org.mockito.stubbing.OngoingStubbing [actions.RefreshRequest => actions.RefreshResponse]
[error]无法应用于(actions.RefreshResponse)
[error] when(mockRefreshService.process(_:RefreshRequest))thenReturn(new RefreshResponse)
如果需要更多信息,请告诉我。否则,如果有人有任何想法,将不胜感激。
答案 0 :(得分:1)
如果使用mockito-scala
,则可以混合使用特征org.mockito.ArgumentMatchersSugar
,它将提供所有适当的特征,此外,对于any
,您不再需要指定类型因为编译器会解决
检查https://github.com/mockito/mockito-scala以获得更多信息
免责声明:我开发了该库(但无论如何仍是模仿套件的一部分)
答案 1 :(得分:0)
所以对于任何来到这里的人我都解决了这个问题,但我很想知道为什么会这样做。
我将_:RefreshRequest替换为任何[RefreshRequest]我理解这一点。
但进口让我绊倒了。
我导入了
import org.mockito.ArgumentMatchers.any
并且当一切正常时
我导入时
import org.mockito.Matchers.any
我收到了错误
value any is not a member of org.mockito.Matchers.any
查看Matchers的文档,它是Argument Matchers的子类,那么它是如何没有的呢?
由于