java - Kotlin lambda 回调的单元测试

标签 java unit-testing lambda kotlin mockito

假设我们有以下功能要测试

fun loadData(dataId: Long, completion: (JsonElement?, Exception?) -> Unit) {
    underlayingApi.post(url = "some/rest/url",
            completion = { rawResult, exception ->
                val processedResult = processJson(rawResult)
                completion(processedResult, exception)
            })
}

我很清楚如何模拟、注入(inject)、 stub 和验证对 underlayingApi 的调用。

如何验证通过 completion(processedResult, exception)返回的结果?

最佳答案

要测试 lambdas 行为,必须模拟 underlayingApi,其中通过 InvoactionOnMock 对象调用 lambda。

    `when`(underlayingApi.post(eq("some/rest/url"),
                               any())).thenAnswer {
        val argument = it.arguments[1]
        val completion = argument as ((rawResult: String?, exception: Exception?) -> Unit)
        completion.invoke("result", null)
    }

这导致在被测对象内调用回调。现在检查被测对象的回调是否正常工作。

    objUnderTest.loadData(id,
                          { json, exception ->
                              assert....
                          })

关于java - Kotlin lambda 回调的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48204784/

相关文章:

java - 如何在 Java8 中强制立即对流进行评估

java - 需要使用 appium 在 safari mobile 上自动播放视频

java - 通过直接更改 FormData keyVals 的列表 jsoup 来更改 FormElement 的信息

java - 更改方法findByOneCss,他收到了不止一种含义和所有

java - 使用模拟资源请求进行单元测试

java - 拆分一个类是否可以更轻松地测试可接受的行为?

android - 无法解析 Intent robolectric ActivityScenarioRule 的 Activity

lambda - 教堂数字: how to encode zero in lambda calculus?

java - 静态工厂模式返回类型中的有界通配符

java - 使用流检索薪水最低的员工列表