使用kotlin lambda回调的unit testing场景
假设我们有以下function来测试
fun loadData(dataId: Long, completion: (JsonElement?, Exception?) -> Unit { underlayingApi.post(url = "some/rest/url", completion = { rawResult, exception -> val processedResult = processJson(rawResult) completion(processedResult, exception) }) }
我很清楚如何模拟,注入,存根和validation对underlayingApi
的调用。
我的问题是:代码如何看起来像validation通过completion(processedResult, exception)
返回的结果completion(processedResult, exception)
?
为了测试lambdas行为, underlayingApi
的InvoactionOnMock
被InvoactionOnMock
通过像这样的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.... })