Stu*_*DTO 9 android unit-testing mockito kotlin mockk
我试图了解如何测试我的应用程序,但我仍在与mockito我一起学习,mockk但也无法使它正常工作,这是我的Presenter
class MyPresenterImpl @Inject constructor(var myUseCase: MyUseCase) : MyContract.Presenter {
private var mView: MyContract.View? = null
private var disposable: Disposable? = null
override fun attachView(view: MyContract.View) {
this.mView = view
this.mView?.showProgressBar(true)
}
override fun loadResults() {
disposable = getList.execute()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result ->
mView?.showProgressBar(false)
mView?.showResults(result)
},
{ error ->
mView?.showProgressBar(false)
mView?.showError(error.localizedMessage)
})
}
override fun rxJavaUnsuscribe() {
if (disposable != null && !disposable!!.isDisposed) {
disposable!!.dispose()
}
}
override fun detachView() {
this.mView = null
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何测试此演示者?是否必须添加所有这些方法?
我尝试使用它,mockito但我也可以使用mockk。
有人告诉我,我必须做些事Schedulers并使用trampoline它,但是对于我来说,尚不清楚有人可以提供示例或解释一下吗?
要为演示者编写单元测试,您应该: 1.mock myUseCase: private val myUseCase = mock<MyUseCase>()
2. addSchedulers.io() andAndroidSchedulers.mainThread() to the constructor of the presenter then you can setSchedulers.trampoline()` 当您创建用于测试的演示者对象时:
class MyPresenterImpl @Inject constructor(
val myUseCase: MyUseCase,
val ioScheduler: Scheduler = Schedulers,
val uiScheduler: Scheduler = AndroidSchedulers.mainThread()
) : MyContract.Presenter
Run Code Online (Sandbox Code Playgroud)
然后在seUp()你的测试中:
presenter = MyPresenterImpl(myUseCase, Schedulers.trampoline(), Schedulers.trampoline())
Run Code Online (Sandbox Code Playgroud)
execute()存根用例的函数: myUseCase.stub {
on { execute() }.thenReturn(Single.just(xyz))
}
Run Code Online (Sandbox Code Playgroud)
笔记:我更喜欢使用Nhaarman的 Mockito 版本
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |