我想嘲笑使用Mockito的Kotlin的通用接口。但到目前为止,我没有找到自然的解决办法。鉴于:嘲笑Kotlin和Mockito的通用接口
interface X<T> {
fun x(): T
}
fun f(x: X<Int>) = x.x()
我可以嘲笑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的通用接口? (我宁愿1的版本没有警告。)
为什么你不想使用帮助函数? 'val x = f(模拟>())'有什么问题? –
mfulton26
因为它感觉就像是一个解决方法,用于“未经检查的转换”问题。有没有办法解决这个问题? – jhunovis
我没有看到[reified type parameters](https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters)作为解决“未检查转换”问题的解决方法。实际上,我将“未经检查的转换”问题看作是(Java)解决方法,不具有通用类型参数(或类似的东西)。 – mfulton26