如何将 运行 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)
}