Android Mockito.verify表示参数不同!打印相同的内容

Android Mockito.verify表示参数不同!打印相同的内容,android,junit,kotlin,mockito,Android,Junit,Kotlin,Mockito,形势 我有一个跟踪器的接口,它有以下方法: fun trackEvent(event: String, args: Bundle? = null) 我想验证是否使用特定的事件调用此方法。 正在测试的内部对象使用Bundle对象调用此方法。 所有事件都指定为 companion object { const val EVENT = "EVENT" } 问题 此验证导致测试失败: Mockito.verify(tracker).trackEvent(Tracker.EVENT)

形势

我有一个
跟踪器的接口
,它有以下方法:

fun trackEvent(event: String, args: Bundle? = null)
我想验证是否使用特定的
事件调用此方法。
正在测试的内部对象使用
Bundle
对象调用此方法。 所有事件都指定为

companion object {
        const val EVENT = "EVENT"
}
问题

此验证导致测试失败:

Mockito.verify(tracker).trackEvent(Tracker.EVENT)
留言:

参数不同!通缉: tracker.trackEvent(“事件”,null);

实际调用有不同的参数: tracker.trackEvent(“事件”,null);

有许多解决方案正在使用
Mockito.eq()
Mockito.refEq()
参数匹配器
捕获
,等等。它们都不适用于我,给那些将面临相同问题的人提供相同或
空点异常
,解决方案是您需要添加
testImplementation“com.nhaarman:mockito kotlin:1.5.0”
在您的
build.gradle
文件中。更多信息,请点击这里

问题是,与
Kotlin
不同,在
Java
中,默认情况下所有类都可以为空。虽然mockito设计用于
Java
,但上面的库添加了使用mockito和
Kotlin
的支持

那么,这个特殊测试的解决方案是什么呢

Mockito.verify(tracker).trackEvent(Tracker.EVENT)

其中
eq()
any()
com.nhaarman.mockito_kotlin的函数


此处的更多信息:

出于兴趣,是否将测试替换为
Mockito.verify(tracker.trackEvent(eq)(“EVENT”)
pass?不建议作为答案,只是好奇。它给出了
java.lang.IllegalStateException:Mockito.eq(Tracker.EVENT)不能为null
exception。即使使用字符串
“EVENT”
用引号括起来,而不是常量?还有什么特殊原因可以解释为什么
事件
是在
伴生对象中声明的,而不是在顶层声明的?如果
显式验证(tracker).trackEvent(tracker.EVENT,null)
会发生什么?
Mockito.verify(tracker).trackEvent(eq(Tracker.ADD_TRANSACTION), any())