【问题标题】:Kotlin ArgumentMatcher errorKotlin ArgumentMatcher 错误
【发布时间】:2018-03-30 15:52:28
【问题描述】:

我有一个问题,我没有在谷歌找到答案。我正在编写单元测试,我想提供一个参数匹配器,所以我可以模拟来自函数的响应。我只是打电话:

Mockito.`when`(
    dataSource.sendPoke(Mockito.argThat({ argument -> true }))
).thenReturn(
    Observable.just(CommonResponse())
)

我收到的只是一个错误:

java.lang.IllegalStateException: Mockito.argThat({ argument -> true }) must not be null

我在 Java 中使用了这种方法,一切正常。谁能告诉我如何在 Kotlin 中实现 ArgumentMatcher?

【问题讨论】:

    标签: android unit-testing junit kotlin mockito


    【解决方案1】:

    argThat 用于验证,而不是用于存根。如果您想根据您的输入存根特定答案,请使用thenAnswer,如下所示(在mockito-kotlin 语法中):

    val mock: DataSource = mock {
       on { sendPoke(any()) }.thenAnswer { Observable.just(it.arguments[0]) }
    }
    

    Mockito 的纯 Java 语法要求你这样做

    doAnswer { Observable.just(it.arguments[0]) }
        .`when`(dataSource.sendPoke(any()))
    

    iirc.

    【讨论】:

    • 我想要达到的目标。我有一个sendPoke 函数,它接受一个参数,但我不知道参数是什么。我需要告诉 Mockito,无论参数是什么,它都应该返回模拟结果。在 Java 中,我是通过 Mockito.argThat 来做的,但如果它在 Kotlin 中不起作用,那么我该如何解决这个问题?
    • 上面的thenAnswer 正是您所需要的。它允许您根据非常具体的参数返回任何模拟结果(甚至允许您在结果中使用该参数的全部或部分)。
    【解决方案2】:

    好的@Thomas Keller,mokito-kotlin 帮助了我。适合我的代码是:

    whenever(dataSource.sendPoke(any()))
        .thenReturn(Observable.just(CommonResponse()))
    

    非常感谢您的帮助:)

    ps。如果这不是最好的解决方案,请随时指出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多