【发布时间】:2019-05-09 08:20:52
【问题描述】:
在 Kotlin(和 Java 8)中,我们可以使用 Lambda 表达式来删除样板回调接口。例如,
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改成Kotlin的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 模拟时发生:要模拟的类: 'kotlin.jvm.functions.Function1',由类加载器加载: 'sun.misc.Launcher$AppClassLoader@7852e922'
如何在 Kotlin 中模拟和验证 Lambda 表达式?有没有可能?
【问题讨论】:
-
试试
mockito-kotlinlib,见github.com/nhaarman/mockito-kotlin/issues/199 -
嗨@OleksandrPapchenko,如果你有时间,你会用示例代码发布答案吗?
标签: testing lambda kotlin mockito