I create a mock of a class with mockk. On this mock I now call a method that gets a lambda as a parameter.

这个lambda用作回调,将回调的状态更改传递给方法的调用方.

class ObjectToMock() {
    fun methodToCall(someValue: String?, observer: (State) -> Unit) {
        ...
    }
}

如何配置模拟以调用传递的lambda?

推荐答案

You can use answers:

val otm: ObjectToMock = mockk()
every {  otm.methodToCall(any(), any())} answers {
    secondArg<(String) -> Unit>().invoke("anything")
}

otm.methodToCall("bla"){
    println("invoked with $it") //invoked with anything
}

answers范围内,您可以访问firstArgsecondArg等,并通过将其作为泛型参数提供来获得预期的类型.请注意,我在这里显式使用invoke是为了使其更具可读性,也可以省略它.

Kotlin相关问答推荐

DataSnapshot.getValue()未记录的奇怪行为

API迁移到Spring Boot 3后,Spring Security无法工作

如何访问方法引用的接收者?

将文本与文本字段的内容对齐

如何在Android应用判断上运行多个查询

用vararg替换列表的设计弃用警告

同时也是一个字符串的 Kotlin 枚举

Kotlin - 如何避免在密封类的 when() 语句中转换第二个变量

Picasso 回调

内联函数导致单元测试代码覆盖率报告出错

为什么 IntelliJ Idea 无法识别我的 Spek 测试?

interface扩展

androidx.core:core-ktx:1.0.0 小部件包丢失

Kotlin get字段注释始终为空

用mockk验证属性设置程序吗?

用Gradle Kotlin DSL构建源jar?

Lint 错误:可疑的相等判断:在 Object DiffUtilEquals 中未实现 equals()

从另一个列表创建一个列表

目前不支持 Gradle 项目的自动库版本更新.请手动更新您的 build.gradle

为什么 Kotlin 会收到这样的 UndeclaredThrowableException 而不是 ParseException?