当前位置: 首页 > 知识库问答 >
问题:

Mockito Scala重载方法值,然后返回备选值

韩烈
2023-03-14

我是Scala新手,正在为Scala中的Play应用程序编写一些测试。Play应用程序已经用Java编写。

我有一个有一个公共方法进程的刷新服务

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得到以下编译器错误,无法弄清楚这些类型如何是矛盾的

[错误]/home/joey/Projects/sntdb/test/controllers/ApiControllerSpec。scala:31:重载方法值,然后返回可选值:

[错误](x$1:actions.RefreshRequest=

[错误](x$1:actions.RefreshRequest=

[错误]无法应用于(操作。刷新响应)

[错误]当(mockRefreshService.process(_:RefreshRequest))然后返回(新的RefreshResponse)

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

共有3个答案

邴俊达
2023-03-14

我有同样的问题,唯一帮助我的是将参数提取到变量中。出于某种原因,它起作用了:

var mockRefreshService = mock[RefreshService]
val response = new RefreshResponse
when(mockRefreshService.process(_: RefreshRequest)) 
    thenReturn(response)
班承恩
2023-03-14

我解决了这个问题,但我很想了解一下为什么会这样。

我用我认为理解的任何[RefreshRequest]替换了_:RefreshRequest。

但是进口让我绊倒了。

我导入了

import org.mockito.ArgumentMatchers.any

那时一切都好了

我进口的时候

import org.mockito.Matchers.any

我有个错误

value any is not a member of org.mockito.Matchers.any

看看Matchers的文档,它是参数Matchers的一个子类,那么它怎么没有呢?

米子轩
2023-03-14

如果您使用mockito-scala,您可以混合使用traitorg.mockito.ArgumentMatchersSugar,它将提供所有适当的,此外,对于任何,您无需再指定类型,因为编译器会弄清楚

检查https://github.com/mockito/mockito-scala欲了解更多信息

免责声明:我开发了该库(但无论如何都是mockito套件的一部分)

 类似资料:
  • 这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应 我试图写一个测试用例和模拟方法findByEmail()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。 有人能帮忙吗。

  • 问题内容: 我正在尝试使用“ any”匹配器对这个getKeyFromStream方法进行存根。我尝试了更明确和不太明确的(anyObject()),但似乎无论我如何尝试,此存根都不会在我的单元测试中返回fooKey。 我想知道是否是因为它受到保护,或者我缺少其他东西或做错了什么。在整个测试中,我还有其他的when / then语句在 起作用, 但是由于某种原因,事实并非如此。 注意:getKey

  • 我对反应性编程相对较新。我的问题是关于

  • 我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法

  • 当一个方法完成时,我试图使用Byte Buddy来执行一些额外的逻辑。以下是示例代码: 当我把代表团和。第二次调用时,此实例的原始调用方将丢失来自“proxyClient”对象的返回值,该对象以前用于调用它的方法调用。我是不是用错了? 基本上,我希望在方法的末尾添加一些附加逻辑(在原始方法内部或添加另一个方法调用并不重要),但同时保留原始方法调用的返回值。

  • 我的角度控制器中有一个对象数组。 我想返回数组中字段的索引值,该字段具有与我的参数匹配的 ID。 数组中只有一个具有匹配 的对象。