当使用参数匹配器或捕获器进行验证时,Mockito向Kotlin抛出错误

当使用参数匹配器或捕获器进行验证时,Mockito向Kotlin抛出错误,kotlin,mockito,Kotlin,Mockito,在将Mockito与Kotlin一起使用时,如果我尝试验证Mock调用,它可以正常工作(这是在Spring测试中): 这给出了预期的行为。。。但只是做一些类似的事情: verify(fragmentProcessor, timeout(20000)).processFragment(Mockito.eq(expectedFragment)) 将出现以下错误: Missing method call for verify(mock) here: -> at uk.co.argos.pro

在将Mockito与Kotlin一起使用时,如果我尝试验证Mock调用,它可以正常工作(这是在Spring测试中):

这给出了预期的行为。。。但只是做一些类似的事情:

 verify(fragmentProcessor, timeout(20000)).processFragment(Mockito.eq(expectedFragment))
将出现以下错误:

Missing method call for verify(mock) here:
-> at uk.co.argos.productapi.services.kafka.KafkaConsumerServiceTest.testFragmentProcessorReceivesMessages(KafkaConsumerServiceTest.kt:47)

Example of correct verification:
    verify(mock).doSomething()

Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.

ArgumentCaptor或其他匹配程序也会发生同样的情况

验证
超时之前,您确定在代码中的某个地方调用了
fragmentProcessor.processFragment(expectedFragment)

错误消息说您没有,所以
verify
抛出异常(它应该这样做)

在这方面:

verify(fragmentProcessor, timeout(20000)).processFragment(expectedFragment)

你没有正确地使用
验证
(你必须使用
Mockito.eq
):它不会验证任何东西,因此不会抛出,但这并不意味着它能像你想象的那样工作。

如果我不使用eq,它会通过绿色。如果我使用eqIt passs绿色,问题就会出现,因为没有eq,它不会验证任何东西。如果您使用eq,它将失败,因为它应该失败,因为您没有在代码中调用预期的方法。
verify(fragmentProcessor, timeout(20000)).processFragment(expectedFragment)