带有参数的 Kotlin lambda 的 Mocktito ArgumentCaptor

Jes*_*ral 5 lambda android function mockito kotlin

我正在尝试在 Kotlin 上对此进行测试:

verify(myInterface).doSomething(argumentCaptor.capture())
capture.value.invoke(0L)
Run Code Online (Sandbox Code Playgroud)

doSomething 在哪里:

doSomething((Long) -> Unit)
Run Code Online (Sandbox Code Playgroud)

如何为此创建 ArgumentCaptor?现在我正在做这个

inline fun <reified T : Any> argumentCaptor() = ArgumentCaptor.forClass(T::class.java)!!
    val captor = argumentCaptor<(Long) -> Unit>()

    verify(mainApiInterface!!).downloadUserProfilePicture(captor.capture())
    captor.value.invoke(0L)
Run Code Online (Sandbox Code Playgroud)

但我得到 java.lang.IllegalStateException: captor.capture() must not be null

我也尝试集成 mockito-kotlin,但出现 PowerMockito 错误:

在 org.mockito.internal.MockitoCore 的类层次结构中找不到名为“reported”的实例字段。

Jam*_*ett 2

像这样使用mockito-kotlin似乎有效:

    val myService = mock<MyInterface>()

    myService.doSomething {
        println(it)
    }

    verify(myService).doSomething(capture { function ->
        function.invoke(123)
    })
Run Code Online (Sandbox Code Playgroud)

编辑:删除不必要的argumentCaptor<(Long) -> Unit>().apply {}-它没有被使用

  • 我错过了什么?`capture(ArgumentCaptor&lt;T&gt;)` 的参数不是 lambda。 (4认同)