Издевательские общие интерфейсы с Kotlin и Mockito

Я пытаюсь издеваться над общим интерфейсом в Котлин, используя Mockito. Но до сих пор я не нашел естественного решения. Данный:

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? (Я бы предпочел версию 1. без предупреждения.)

Просто используйте проект mockito-kotlin . В этом проекте содержатся все необходимые помощники для mockito. И поддерживает mockito 2.1.

Upd. Для работы с «неквалифицированным броском» используйте параметры типа Reified .

Вы говорите, что «но я не хочу использовать вспомогательные функции», но почему? Это встроенная функция, поэтому во время компиляции функция времени будет включена на всех сайтах вызова.