android - kotlin 测试蒙山 mockito : comparison Failure

标签 android kotlin mockito

我正在尝试覆盖测试简单的演示者,如下所示:

class Presenter{
    fun getData(params:SomeParams) {
        usecase.execute(getObservable, params)
    }

    private fun getObservable() = object :DisposableObserver<SomeData>{
        override fun onComplete() {}
        override fun onNext(t:SomeData) {}
        override fun onError(e: Throwable) {}
    }
}

这是我的简单测试:

@Test
fun getContacts() {
    presenter.getData()

    var observer = Mockito.mock(DisposableObserver::class.java) as DisposableObserver<SomeData>
    verify(useCase).execute(observer, someParams)
}

在最后一行之后我得到了下一个错误:

Argument(s) are different! Wanted:
    useCase.execute(
    com.test.PresenterTest$getObservable$o$1@579d011c,
    kotlin.Unit
    );
    -> at com.test.execute(UseCaseObservable.kt:37)
    Actual invocation has different arguments:
    useCase.execute(
    com.test.Presenter$getObservableObserver$1@733c423e,
    kotlin.Unit
    );
    -> at com.test.Presenter.getObservable(Presenter.kt:43)

那么我得到这个错误是什么以及如何避免它并用测试覆盖这个方法?谢谢!

最佳答案

您正在尝试相互比较两个不同的实例:一个由 Mockito 创建(mock),另一个由 Presenter 创建(getObservable).两者互不相等,所以Mockito给出比较失败。

相反,您可以使用 any:

verify(useCase).execute(any(DisposableObserver::class.java), eq(someParams))

关于android - kotlin 测试蒙山 mockito : comparison Failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586826/

相关文章:

java - 使用 Mockito 时避免未经检查的警告

Android paint.SetStrokeWidth(0.5) 即小于 1 像素

android - Prolem 使用 urbanairship Provider android

android - 在 android 上使用状态时 react native textInput 中的错误

Android 应用内计费 : catch “You already have a pending order for this item”

spring - Spring Web Flux(响应式(Reactive))功能路由与Kotlin一起无法正常工作

android - Material Slider OnSliderTouchListener 的方法只能在同一个库组内调用

java - Retrofit 2 请求没有给我数据

java - Mockito:保存模拟参数并从另一个函数返回它

java - 当方法调用实际返回某些东西时,有没有办法让 Mockito doNothing()