Dav*_*kup 9 android unit-testing functional-programming kotlin mockk
我想知道如何运行作为参数传递给模拟函数的 lambda 函数。并在调用模拟方法时运行它。
我正在使用 Mockk,我想象代码是这样的:
class DataManager {
fun submit(lambda: (Int) => Unit) { ... }
}
...
val mock = mockk<DataManager>()
every { mock.submit(lambda = any()) }.run { lambda(5) }
Run Code Online (Sandbox Code Playgroud)
在我的实际实现中,数据管理器调用服务器并在收到成功响应时运行 lambda 作为回调。lambda 恰好是被测类的私有方法。
use*_*377 12
您需要使用 Capture 而不是 Any。
val dataManager: DataManager = mockk()
every { dataManager.submit(captureLambda()) } answers { lambda<(Int) -> Unit>().invoke(5) }
dataManager.submit { i -> println(i) }
Run Code Online (Sandbox Code Playgroud)
此外,您的函数类型的声明无效。
(Int) => Unit
该有的时候你就有了(Int) -> Unit
。
小智 6
可以通过以下方法解决。
带有答案中的参数:
every { dataManager.submit(any()) } answers {
firstArg<(Int) -> Unit>().invoke(5)
}
Run Code Online (Sandbox Code Playgroud)
或使用 captureLambda
every { dataManager.submit(captureLambda()) } answers {
lambda<(Int) -> Unit>().captured.invoke(5)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4831 次 |
最近记录: |