Search code examples
javamockitokotlinkotlin-extension

How do I create an extension function in Kotlin, which operates on a class?


Imagine, I have this line of code:

import org.mockito.Mockito
val mock = Mockito.mock(Sim2ParametersProvider::class.java)

I want to be able to write it like this:

val mock = Sim2ParametersProvider::class.mock()

How do I do this?

I tried

fun <T : kotlin.Any> kotlin.reflect.KClass<T>.mock() = Mockito.mock(this)

but it gives me compiler errors.


Solution

  • It looks like you're slightly mixing up KClass and java Class. The following compiles for me, to extend java classes:

    fun <T> Class<T>.mock() = Mockito.mock(this)
    val mock1 = FooClass::class.java.mock()
    

    Also the following compiles for me, extending Kotlin KClass:

    fun <T: Any> KClass<T>.mock() = Mockito.mock(this.java)
    val mock2 = FooClass::class.mock()
    

    Assuming that FooClass is a class, of course.