В Kotlin (и Java 8) мы можем использовать лямбда-выражение для удаления стандартного интерфейса обратного вызова.Например,
data class Profile(val name: String)
interface ProfileCallback {
fun onSuccess(profile: Profile)
}
class ProfileRepository(val callback: ProfileCallback) {
fun getProfile() {
// do calculation
callback.onSuccess(Profile("name"))
}
}
Мы можем изменить remove ProfileCallback
и изменить его на Lambda Котлина:
class ProfileRepository(val callback: (Profile) -> Unit) {
fun getProfile() {
// do calculation
callback(Profile("name"))
}
}
Это прекрасно работает, но я не уверен, как издеваться, а затемпроверьте эту функцию.Я пытался использовать Mockito, как это
@Mock
lateinit var profileCallback: (Profile) -> Unit
@Test
fun test() {
// this wouldn't work
Mockito.verify(profileCallback).invoke(any())
}
, но он выдает исключение:
org.mockito.exceptions.base.MockitoException: ClassCastException произошел во время создания mockito mock: classиздеваться: 'kotlin.jvm.functions.Function1', загруженный загрузчиком классов:'sun.misc.Launcher$AppClassLoader@7852e922'
Как смоделировать и проверить лямбда-выражение в Kotlin?Это вообще возможно?