Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何使用mock调用lambda回调_Kotlin_Mocking_Mockk - Fatal编程技术网

Kotlin 如何使用mock调用lambda回调

Kotlin 如何使用mock调用lambda回调,kotlin,mocking,mockk,Kotlin,Mocking,Mockk,我用mock创建了一个类的mock。 在这个模拟中,我现在调用一个方法,该方法获取一个lambda作为参数 此lambda用作回调,将回调的状态更改传递给方法的调用方 class ObjectToMock() { fun methodToCall(someValue: String?, observer: (State) -> Unit) { ... } } 如何配置模拟以调用传递的lambda?您可以使用: val-otm:ObjectToMock=mo

我用mock创建了一个类的mock。 在这个模拟中,我现在调用一个方法,该方法获取一个lambda作为参数

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

class ObjectToMock() {
    fun methodToCall(someValue: String?, observer: (State) -> Unit) {
        ...
    }
}
如何配置模拟以调用传递的lambda?

您可以使用:

val-otm:ObjectToMock=mock()
每个{otm.methodToCall(any(),any())}都有答案{
第二个参数单位>()。调用(“任何内容”)
}
otm.方法调用(“bla”){
println(“用$it调用”)//用任何东西调用
}

answers
范围内,您可以访问
firstArg
secondArg
等,甚至可以通过将其作为泛型参数提供来获得所需的类型。请注意,我使用了
invoke
使其更具可读性,您也可以将其作为带空括号的普通函数调用。

我不得不为回调寻找更多的示例,并在中找到了一些示例。就我而言,它更具体一点。 我想检查并模拟自定义回调实现的onFailure和onSuccess案例
MyCustomCallback
实现
ListenableFutureCallback

代码与我的
ExampleProducer
类类似,该类将具有
send
函数:

fun发送(数据:字符串){
val responseFuture=kafkaTemplate.send(主题,数据)
addCallback(MyCustomCallback())
}
那么,测试将由谁进行:

@测试
有趣的失败测试(){
kafkaTemplate:kafkaTemplate=mock()
val captureCallback=slot()
每个{callback.addCallback(capture(captureCallback))}应答{
captureCallback.captured.onFailure(Throwable())
}
每个{kafkaTemplate.send(any())}返回回调
val prod:ExampleProducer=ExampleProducer()
产品发送(“测试”)
//然后,您可以验证行为或检查captureCallback.captured
验证{kafkaTemplate.send(any())}
assertNotNull(captureCallback.captured)
}
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
}