我正在尝试使用 Mockito 模拟 Kotlin 中的通用接口(interface)。但到目前为止我还没有找到自然的解决方案。鉴于:
interface X<T> {
fun x(): T
}
fun f(x: X<Int>) = x.x()
我可以 mock X
具有以下任何一项:
val x = f(Mockito.mock(X::class.java) as X<Int>)
但这会生成“未经检查的转换”警告。
@Mock lateinit var x: X<Int>
但我不想使用
@Mock
注释,因为我喜欢将我的字段设置为最终的。引入一个辅助函数,如mockito-kotlin library是:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!!
然后这样调用它:
val x: X<Int> = mock()
但我不想使用辅助函数。
是否有一种优雅的纯 Kotlin 方式来使用 Mockito 模拟通用接口(interface)? (我更喜欢没有警告的 1. 版本。)
最佳答案
只需使用 mockito-kotlin项目。该项目包含所有mockito 必须有的助手。并且还支持mockito 2.1。
更新。要处理“未检查的强制转换”,请使用 Reified type parameters .
你说“但我不想使用辅助函数。”,但为什么呢?这是内联函数,因此在编译时函数将在所有调用站点处内联。
关于使用 Kotlin 和 Mockito 模拟通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495622/