Mockito Scala重载方法值然后返回替代

时间:2017-05-11 01:03:09

标签: java scala types mockito

我是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)

如果需要更多信息,请告诉我。否则,如果有人有任何想法,将不胜感激。

2 个答案:

答案 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的子类,那么它是如何没有的呢?

由于