【发布时间】:2018-11-01 09:34:00
【问题描述】:
情况
我有一个Tracker 的接口,它有这个方法:
fun trackEvent(event: String, args: Bundle? = null)
我想验证,这个方法是用特定的event 调用的。
被测试的内部对象使用Bundle 对象调用此方法。
所有事件都指定为
companion object {
const val EVENT = "EVENT"
}
问题
此验证测试失败:
Mockito.verify(tracker).trackEvent(Tracker.EVENT)
带有消息:
论据不同!通缉: tracker.trackEvent("事件", null); ...
实际调用有不同的参数: tracker.trackEvent("事件", null); ...
有很多解决方案,它们正在使用
Mockito.eq()、Mockito.refEq()、ArgumentMatchers、Captures 等。他们都没有为我工作,给同样的或NullPointerException
【问题讨论】:
-
出于兴趣,用
Mockito.verify(tracker).trackEvent(eq("EVENT"))替换测试是否通过?不建议作为答案,只是好奇。 -
它给了
java.lang.IllegalStateException: Mockito.eq(Tracker.EVENT) must not be null异常。 -
即使您在引号中使用字符串
"EVENT"而不是常量? -
还有什么特殊原因说明为什么
EVENT在companion object中声明而不是在顶层? -
如果你明确
verify(tracker).trackEvent(Tracker.EVENT, null)会发生什么?
标签: android junit kotlin mockito