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)
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(???)