如何将 运行 lambda 函数传递给模拟方法?
How to run lambda function passed to a mockked method?
我想知道如何 运行 将 lambda 函数作为参数传递给模拟函数。并且 运行 每当调用模拟方法时它。
我正在使用 Mockk,我想代码应该是这样的:
class DataManager {
fun submit(lambda: (Int) => Unit) { ... }
}
...
val mock = mockk<DataManager>()
every { mock.submit(lambda = any()) }.run { lambda(5) }
在我的实际实现中,datamanager 调用服务器并 运行s lambda 在收到成功响应时作为回调。 lambda恰好是被测class的私有方法
您需要使用 Capture 而不是 Any。
val dataManager: DataManager = mockk()
every { dataManager.submit(captureLambda()) } answers { lambda<(Int) -> Unit>().invoke(5) }
dataManager.submit { i -> println(i) }
此外,您的函数类型声明无效。
你有 (Int) => Unit
而它应该是 (Int) -> Unit
。
可以通过以下方式解决
使用答案中的参数:
every { dataManager.submit(any()) } answers {
firstArg<(Int) -> Unit>().invoke(5)
}
或使用 captureLambda
every { dataManager.submit(captureLambda()) } answers {
lambda<(Int) -> Unit>().captured.invoke(5)
}
我想知道如何 运行 将 lambda 函数作为参数传递给模拟函数。并且 运行 每当调用模拟方法时它。
我正在使用 Mockk,我想代码应该是这样的:
class DataManager {
fun submit(lambda: (Int) => Unit) { ... }
}
...
val mock = mockk<DataManager>()
every { mock.submit(lambda = any()) }.run { lambda(5) }
在我的实际实现中,datamanager 调用服务器并 运行s lambda 在收到成功响应时作为回调。 lambda恰好是被测class的私有方法
您需要使用 Capture 而不是 Any。
val dataManager: DataManager = mockk()
every { dataManager.submit(captureLambda()) } answers { lambda<(Int) -> Unit>().invoke(5) }
dataManager.submit { i -> println(i) }
此外,您的函数类型声明无效。
你有 (Int) => Unit
而它应该是 (Int) -> Unit
。
可以通过以下方式解决
使用答案中的参数:
every { dataManager.submit(any()) } answers {
firstArg<(Int) -> Unit>().invoke(5)
}
或使用 captureLambda
every { dataManager.submit(captureLambda()) } answers {
lambda<(Int) -> Unit>().captured.invoke(5)
}