Mockito ArgumentCaptor для функции Kotlin

Рассмотрим функцию, которая принимает реализацию интерфейса как аргумент следующим образом:

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

Когда я хочу проверить вызывающую функцию, я могу сделать что-то вроде

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

Чтобы проверить, что делает другой класс при вызове обратного вызова, я могу сделать

 captor.value.done() 

Вопрос: Как я могу сделать то же самое, если я заменил интерфейс обратного вызова функцией высокого порядка, например

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

Можно ли это сделать с помощью ArgumentCaptor и какой класс мне нужно использовать в ArgumentCaptor.forClass(???)

Я рекомендую nhaarman / mockito-kotlin: Использование Mockito с Kotlin

Он решает это с помощью встроенной функции с параметром типа reified :

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

Источник: mockito-kotlin / ArgumentCaptor.kt at a6f860461233ba92c7730dd42b0faf9ba2ce9281 · nhaarman / mockito-kotlin

например:

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

или

 val captor: () -> Unit = argumentCaptor() verify(someClass).doSomeThing(captor.capture()) 
Intereting Posts
«Лямбда с приемником»: что это за конструкция Котлин? Летучие свойства в Котлине? Соглашения об именах файлов для Kotlin Dagger 2 обменивается экземпляром объекта между ведущими Как отличить глобальную переменную от локального с тем же именем в Kotlin? `NoClassDefFoundError: android.databinding.DataBindingUtil` при запуске androidTest для фрагмента с ожиданием данных Решение проблемы с библиотекой anko версии 0.9.1 Можно ли использовать javascript из источников Kotlin в JVM? Dagger 2 – Inject со значением по умолчанию в конструкторе Ошибка при использовании Glide с kotlin kotlin coroutine throws java.lang.IllegalStateException: уже возобновлено, но получил значение Место Выполнение не выполнено для задачи ': calculator: compileKonanKotlinArithmeticParserIphone' Ошибка: ошибка: разрешены только безопасные (?.) Или непустые (!!.) Вызовы в приемнике с нулевым значением типа View? Kotlin lazy var throwing ClassCastException: kotlin.UNINITIALIZED_VALUE Вставить или добавить элемент в ArrayList в Котлин?