假设我们有以下功能要测试
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/