如何测试主持人MVP Android

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它,但是对于我来说,尚不清楚有人可以提供示例或解释一下吗?

Yoy*_*der 0

要为演示者编写单元测试,您应该: 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)
  1. execute()存根用例的函数:
    myUseCase.stub {
        on { execute() }.thenReturn(Single.just(xyz))
    }
Run Code Online (Sandbox Code Playgroud)
  1. 验证您的代码

笔记:我更喜欢使用Nhaarman的 Mockito 版本