您如何让Mockito与Kotlin非null类型兼容呢?

时间:2018-08-16 01:51:28

标签: java android kotlin mockito

作为重现此概念的最基本示例,我有一个此类:

open class Something {
    fun doSomething(param: String): Boolean {
        println(param)
        return true
    }
}

当我尝试在此处模拟时:

class ExampleUnitTest {
    @Test
    fun mockito_test() {
        val myMock =  Mockito.mock(Something::class.java)
        Mockito.`when`(myMock.doSomething(any())).thenReturn(true)
    }
}

执行此单元测试会出现此错误:

java.lang.IllegalStateException: any() must not be null

    at com.example.mockitokotlinexample.ExampleUnitTest.mockito_test(ExampleUnitTest.kt:18)

```

从理论上讲,我可以将要模拟的方法的参数设置为可空值,但这违反了kotlin的目的。我在网上找到了替代解决方案,即以下变通办法:https://stackoverflow.com/a/30308199/2127532

但是这些并不能解决问题,其他人似乎评论说他们不能在最新版本的Kotlin上运行。他们从一开始就觉得很棘手。

我也尝试使用此库:https://github.com/nhaarman/mockito-kotlin

再次出现IllegalStateException错误。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

我已经通过创建自己的any()解决了这个问题

private fun <T> any(type : Class<T>): T { Mockito.any(type) return null as T }