嘲笑Kotlin和Mockito的通用接口

我正在尝试使用Mockito模拟Kotlin中的通用接口。 但到目前为止,我没有找到自然的解决办法。 鉴于:

interface X<T> { fun x(): T } fun f(x: X<Int>) = xx() 

我可以用下面的任何一个来模拟X

  1. val x = f(Mockito.mock(X::class.java) as X<Int>)

    但是这会产生一个“不受控制的投射”的警告。

  2. @Mock lateinit var x: X<Int>

    但我不想使用@Mock注释,因为我喜欢让我的字段最终。

  3. 引入一个辅助函数,就像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类型参数 。

你说“但是我不想使用帮助函数”,但是为什么呢? 这是内联函数,所以在编译时函数会在所有的调用网站都会内联。