nhaarman kt1 mockito kotlin

com nhaarman mockito kotlin kt1



Mockito ArgumentCaptor para la funciĆ³n Kotlin (1)

Recomiendo nhaarman / mockito-kotlin: usar Mockito con Kotlin

Resuelve esto a través de una función en línea con un parámetro de tipo reificado :

inline fun <reified T : Any> argumentCaptor() = ArgumentCaptor.forClass(T::class.java)

Fuente: mockito-kotlin / ArgumentCaptor.kt en a6f860461233ba92c7730dd42b0faf9ba2ce9281 · nhaarman / mockito-kotlin

p.ej:

val captor = argumentCaptor<() -> Unit>() verify(someClass).doSomeThing(captor.capture())

o

val captor: () -> Unit = argumentCaptor() verify(someClass).doSomeThing(captor.capture())

Considere una función que toma una implementación de interfaz como un argumento como este:

interface Callback { fun done() } class SomeClass { fun doSomeThing(callback: Callback) { // do something callback.done() } }

Cuando quiero probar al que llama con esta función, puedo hacer algo como

val captor = ArgumentCaptor.forClass(Callback::class) Mockito.verify(someClass).doSomeThing(captor.capture())

Para probar lo que hace la otra clase cuando se invoca la devolución de llamada, entonces puedo hacer

captor.value.done()

Pregunta: ¿Cómo puedo hacer lo mismo si reemplazo la interfaz de devolución de llamada con una función de orden superior como

fun doSomeThing(done: () -> Unit) { // do something done.invoke() }

¿Se puede hacer con ArgumentCaptor y qué clase debo usar en ArgumentCaptor.forClass(???)