android - 如何运行传递给模拟方法的 lambda 函数?

标签 android unit-testing kotlin functional-programming mockk

我想知道有什么可能运行作为参数传递给模拟函数的 lambda 函数。并在调用模拟方法时运行它。

我正在使用 Mockk,我想代码是这样的:

class DataManager {
   fun submit(lambda: (Int) => Unit) { ... }
}

...

val mock = mockk<DataManager>()

every { mock.submit(lambda = any()) }.run { lambda(5) }

在我的实际实现中,datamanager 调用服务器并在收到成功响应时将 lambda 作为回调运行。 lambda 恰好是被测类的私有(private)方法。

最佳答案

您需要使用 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 .

关于android - 如何运行传递给模拟方法的 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61108797/

相关文章:

java - 在 Android 中调用 REST Web 服务并在字符串数据中获取 null

java - 如何在 RecyclerView 中使用字符串?

java - 从另一个服务中的 Intent 启动服务会出现运行时错误

javascript - 滑动检测和点击检测

c++ - 如何模拟 boost 抛出异常?

c# - 如何修复这种循环依赖?

android - 如何使用 Kotlin 为 RecyclerView 创建上下文菜单

kotlin - 在Kotlin中重复字符串n次

unit-testing - 当测试特定条件/场景时,是否需要检查之前和之后的结果?

android - 如何使用 Kotlin 声明 Pair 数组