Android Kotlin中带有@Captor注释的ArgumentCaptor
我在Kotlin中使用带注释的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
@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)
}