【问题标题】:Android Mockito.verify says Argument(s) are different! with printing same contentAndroid Mockito.verify 说参数不同!打印相同的内容
【发布时间】: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()ArgumentMatchersCaptures 等。他们都没有为我工作,给同样的或NullPointerException

【问题讨论】:

  • 出于兴趣,用Mockito.verify(tracker).trackEvent(eq("EVENT")) 替换测试是否通过?不建议作为答案,只是好奇。
  • 它给了java.lang.IllegalStateException: Mockito.eq(Tracker.EVENT) must not be null异常。
  • 即使您在引号中使用字符串 "EVENT" 而不是常量?
  • 还有什么特殊原因说明为什么EVENTcompanion object 中声明而不是在顶层?
  • 如果你明确verify(tracker).trackEvent(Tracker.EVENT, null)会发生什么?

标签: android junit kotlin mockito


【解决方案1】:

对于那些将面临同样问题的人,解决方案是您需要添加 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多