Android Kotlin中带有@Captor注释的ArgumentCaptor

Android Kotlin中带有@Captor注释的ArgumentCaptor,android,unit-testing,kotlin,mockito,Android,Unit Testing,Kotlin,Mockito,我在Kotlin中使用带注释的 @Captor private lateinit var captor: ArgumentCaptor<MyObject> @Mock private lateinit var mockObject: InnerObject private lateinit var objectToTest: MyClass @Before fun setUp() { MockitoAnnotations.initMocks(this) objec

我在Kotlin中使用带注释的

@Captor private lateinit var captor: ArgumentCaptor<MyObject>
@Mock private lateinit var mockObject: InnerObject
private lateinit var objectToTest: MyClass

@Before
fun setUp() {
    MockitoAnnotations.initMocks(this)

    objectToTest = MyClass(mockObject)
}

fun testSomething() {
    objectToTest.doSomething()

    verify(mockObject).callMethod(captor.capture())
    assertThat(expectedResult, captor.value)

}
我使用java尝试了同样的方法,并且它工作正常,当我将其转换为Kotlin时,我得到了异常


这和科特林有关吗?还是我用@Captor的方法不对

如果您正在使用Mockito,则需要在test class
setup
方法中调用
MockitoAnnotations.initMocks(this)
。您的captor属性从未初始化,这就是为什么您将获得IllegalStateException

编辑: 我想你会找到解决办法的。
您的问题也可能是重复问题,因为我提供给您的链接中说明了类似的问题。

它与Kotlin相关,因为默认情况下,所有参数和字段都不可为空。您必须定义callMethod nullable的参数:

mockObject).callMethod( any : Any? )
解决此问题的另一种方法是使用,它避免了以下内容的非法StateException和@KCaptor注释:

import org.mockito4kotlin.annotation.KCaptor
导入org.mockito4kotlin.annotation.MockAnnotations
@KCaptor
lateinit变量捕获器:KArgumentCaptor
趣味设置(){
MockAnnotations.initMocks(此)
objectToTest=MyClass(mockObject)
}
有趣的事{
objectToTest.doSomething()
验证(mockObject).callMethod(captor.capture())
资产(expectedResult、captor.value)
}

谢谢,是的,我正在进行初始化。我用我的更多代码更新了帖子
mockObject).callMethod( any : Any? )
import org.mockito4kotlin.annotation.KCaptor
import org.mockito4kotlin.annotation.MockAnnotations

@KCaptor
lateinit var captor: KArgumentCaptor<MyObject>

fun setUp() {
    MockAnnotations.initMocks(this)

    objectToTest = MyClass(mockObject)
}

fun testSomething() {

    objectToTest.doSomething()


    verify(mockObject).callMethod(captor.capture())
    assertThat(expectedResult, captor.value)

}