Kotlin ArgumentMatcher错误

时间:2018-03-30 15:52:29

标签: android unit-testing junit kotlin mockito

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

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?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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

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

非常感谢您的帮助:)

PS。如果这不是最佳解决方案,请随时指出。