嘲笑Kotlin和Mockito的通用接口
我正在尝试使用Mockito模拟Kotlin中的通用接口。 但到目前为止,我没有找到自然的解决办法。 鉴于:
interface X<T> { fun x(): T } fun f(x: X<Int>) = xx()
我可以用下面的任何一个来模拟X
:
-
val x = f(Mockito.mock(X::class.java) as X<Int>)
但是这会产生一个“不受控制的投射”的警告。
-
@Mock lateinit var x: X<Int>
但我不想使用
@Mock
注释,因为我喜欢让我的字段最终。 -
引入一个辅助函数,就像mockito-kotlin库所做的那样:
inline fun <reified T : Any> mock(): T = Mockito.mock(T::class.java)!!
然后像这样调用它:
val x: X<Int> = mock()
但我不想使用帮助函数。
有没有一个优雅的纯Kotlin方式来模拟与Mockito的通用接口? (我宁愿没有警告的一个版本。)
只需使用mockito-kotlin项目。 这个项目包含所有mockito必须的帮手。 并支持mockito 2.1。
UPD。 要处理“未经转换的转换”,请使用Reified类型参数 。
你说“但是我不想使用帮助函数”,但是为什么呢? 这是内联函数,所以在编译时函数会在所有的调用网站都会内联。