我正在尝试覆盖测试简单的演示者,如下所示:
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/