gpt4 book ai didi

Kotlin 函数的 Mockito ArgumentCaptor

转载 作者:IT老高 更新时间:2023-10-28 13:27:12 24 4
gpt4 key购买 nike

考虑一个将接口(interface)实现作为参数的函数,如下所示:

interface Callback {
fun done()
}

class SomeClass {

fun doSomeThing(callback: Callback) {

// do something

callback.done()

}
}

当我想测试这个函数的调用者时,我可以做类似的事情

val captor = ArgumentCaptor.forClass(Callback::class)
Mockito.verify(someClass).doSomeThing(captor.capture())

为了测试调用回调时其他类的作用,我可以这样做

captor.value.done()

问题:如果我将回调接口(interface)替换为像

这样的高阶函数,我该怎么做
fun doSomeThing(done: () -> Unit) {

// do something

done.invoke()

}

这可以用 ArgumentCaptor 完成吗?我必须在 ArgumentCaptor.forClass(???)

中使用什么类

最佳答案

我推荐nhaarman/mockito-kotlin: Using Mockito with Kotlin

它通过 inline function 解决了这个问题。与 reified type parameter :

inline fun <reified T : Any> argumentCaptor() = ArgumentCaptor.forClass(T::class.java)

来源:mockito-kotlin/ArgumentCaptor.kt at a6f860461233ba92c7730dd42b0faf9ba2ce9281 · nhaarman/mockito-kotlin

例如:

val captor = argumentCaptor<() -> Unit>()
verify(someClass).doSomeThing(captor.capture())

val captor: () -> Unit = argumentCaptor()
verify(someClass).doSomeThing(captor.capture())

关于Kotlin 函数的 Mockito ArgumentCaptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com