我正试图在Kotlin身上测试这一点:
verify(myInterface).doSomething(argumentCaptor.capture())
capture.value.invoke(0L)
doSomething在哪里:
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()不能为空
我也尝试过集成mockito-kotlin,但我得到了PowerMockito错误:
在org. mockito. internal. MockitoCore的类层次结构中找不到名为“reported”的示例字段。
2条答案
按热度按时间o4tp2gmn1#
像这样使用mockito-kotlin看起来是可行的:
编辑:删除了不必要的
argumentCaptor<(Long) -> Unit>().apply {}
-它没有被使用0x6upsns2#
与kotlin1.3.72和com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0一样,以下内容对我来说很好:
通过
val captor = argumentCaptor<() -> Unit>()
创建一个参数捕获器,并在其上调用captor.capture()
。对于
nullableArgumentCaptor()
的可空捕获器,还有一个变体下面的单元测试捕获
diff.open()
的() -> Unit
类型的lambda。mockito的nhaarman Package 器为mockito类
ArgumentCaptor
创建了一个 Package 器KArgumentCaptor
。nhaarman Package 器通过创建一个示例而不是mockito中的null
来修复您的错误。