Mockk:在调用mock服务的真实对象中执行回调代码



我尝试实现类似的功能:如何使用mock 调用lambda回调

我把一个模拟的服务传递给我的实物。如何调用myService.get回调?此代码从未被调用,并且我的测试在该请求时停止。

以下是一些示例代码:

class MyObject(private val myService: MyService){
fun getSomeStuff() {
myService.get(object: MyService.Callback<MyServiceResponse>{
override fun onResponse(response: MyServiceResponse?) {
// check response and do some stuff
// I want to continue my tests here, but this gets never called
}
})
}

如何创建一个在回调中继续的测试?

以下是我在测试中尝试的内容:

@Test
fun `get some stuff - success`() {
val myService = mockk<MyService>() {
every { get(any()) } answers {
firstArg<() -> MyService.Callback<MyServiceResponse>>().invoke()
}
}
val myObject = MyObject(myService)
myObject.getSomeStuff()
}

您应该能够使用调用onResponse()

every { get(any()) } 
answers {
firstArg<MyService.Callback<MyServiceResponse>>().onResponse(aMyServiceResponse)
}

顺便说一句,当您使用回调时,我想实现是异步的,所以您可能需要使用coEvery/coAnswer变体。

HTH-

最新更新