Mocktito ArgumentCaptor for Kotlin lambda with arguments

时间:2017-01-30 21:26:16

标签: android function lambda mockito kotlin

我想在Kotlin上测试一下:

verify(myInterface).doSomething(argumentCaptor.capture())
capture.value.invoke(0L)

在哪里做某事:

doSomething((Long) -> Unit)

如何为此创建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)

但我收到java.lang.IllegalStateException:captor.capture()不能为null

我也尝试过整合mockito-kotlin,但我收到了PowerMockito错误:

  

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

1 个答案:

答案 0 :(得分:3)

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

    val myService = mock<MyInterface>()

    myService.doSomething {
        println(it)
    }

    verify(myService).doSomething(capture { function ->
        function.invoke(123)
    })

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