gpt4 book ai didi

android - 在 Kotlin 中带有 @Captor 注释的 ArgumentCaptor

转载 作者:行者123 更新时间:2023-11-29 00:59:01 24 4
gpt4 key购买 nike

我正在使用 ArgumentCaptor@Captor像这样在 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)

}

方法 callMethod() 在 doSomething() 中被调用,我想捕获发送给它的参数。

我的问题是我得到:

java.lang.IllegalStateException: captor.capture() must not be null

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

这与 Kotlin 相关吗?或者我没有以正确的方式使用@Captor?

最佳答案

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

mockObject).callMethod( any : Any? )

另一种解决方法是使用 mockito-kotlin这避免了 mockito4kotlin.annotation 的 IllegalStateException 和 @KCaptor 注释:

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)

}

关于android - 在 Kotlin 中带有 @Captor 注释的 ArgumentCaptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52474596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com