代码之家  ›  专栏  ›  技术社区  ›  Demigod

安卓莫基托。验证说参数不同!打印相同的内容

  •  2
  • Demigod  · 技术社区  · 6 年前

    形势

    我有一个 Tracker 它有这样的方法:

    fun trackEvent(event: String, args: Bundle? = null)
    

    我想验证一下,这个方法是用特定的 event . 正在测试的内部对象使用调用此方法 Bundle 对象 所有事件都指定为

    companion object {
            const val EVENT = "EVENT"
    }
    

    问题

    此验证导致测试失败:

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

    留言:

    争论是不同的!通缉: 追踪器。trackEvent(“事件”,空); ...

    实际调用有不同的参数: 追踪器。trackEvent(“事件”,空); ...

    有许多解决方案正在使用 Mockito.eq() , Mockito.refEq() , ArgumentMatchers , Captures 等等。他们没有一个为我工作,给了我相同或相同的答案 NullPointerException

    1 回复  |  直到 6 年前
        1
  •  2
  •   Demigod    6 年前

    对于那些将面临相同问题的人,解决方案是您需要添加 testImplementation "com.nhaarman:mockito-kotlin:1.5.0" 在你的 build.gradle 文件更多信息,这里 https://github.com/nhaarman/mockito-kotlin .

    问题是 Java 默认情况下,所有类都可以为空,这与 Kotlin .而mockito设计用于 JAVA ,上面的库使用Mockito和 科特林 .

    所以,这个特殊测试的解决方案

    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