Android Mockito.verify说Argument(s)是不同的!打印相同的内容

时间:2018-05-22 14:51:22

标签: android junit kotlin mockito

情况

我有一个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()ArgumentMatchersCaptures等。他们都没有为我工作,给予相同或NullPointerException

1 个答案:

答案 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的函数。

此处有更多信息:https://stackoverflow.com/a/38722935/3569545