情况
我有一个Tracker
的界面,它有这个方法:
fun trackEvent(event: String, args: Bundle? = null)
我想验证,此方法是使用特定的event
调用的。
正在测试的内部对象使用Bundle
对象调用此方法。
所有事件都指定为
companion object {
const val EVENT = "EVENT"
}
问题
此验证测试失败:
Mockito.verify(tracker).trackEvent(Tracker.EVENT)
带有消息:
参数不同!通缉: tracker.trackEvent(“EVENT”,null); ... 的
实际调用有不同的参数: tracker.trackEvent(“EVENT”,null); ... 的
有许多解决方案正在使用
Mockito.eq()
,Mockito.refEq()
,ArgumentMatchers
,Captures
等。他们都没有为我工作,给予相同或NullPointerException
答案 0 :(得分:2)
对于那些将面临同样问题的人,解决方案是您需要添加
testImplementation "com.nhaarman:mockito-kotlin:1.5.0"
文件中的build.gradle
。更多信息,这里
https://github.com/nhaarman/mockito-kotlin
问题在于Java
默认情况下所有类都可以为空,与Kotlin
不同。虽然mockito旨在与Java
一起使用,但上面的库会使用Mockito和Kotlin
添加支持。
所以,这个特定测试的解决方案
Mockito.verify(tracker).trackEvent(Tracker.EVENT)
是
Mockito.verify(tracker).trackEvent(eq(Tracker.ADD_TRANSACTION), any())
其中eq()
和any()
是com.nhaarman.mockito_kotlin
的函数。