Kotlin 如何使用mock调用lambda回调
我用mock创建了一个类的mock。 在这个模拟中,我现在调用一个方法,该方法获取一个lambda作为参数 此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
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
}