覆盖RxAndroid计划程序进行测试

时间:2019-01-09 14:57:07

标签: android testing rx-java

我已经看到使用RxImmediateSchedulerRule来覆盖调度程序进行测试。但是,在我的情况下,由于我使用的是另一种调度程序-android10 cleanarchitecture github repo中的ThreadExecutor和PostExecutionThread,因此它不起作用。

class UseCase(val repo: Repo, val threadExecutor: ThreadExecutor, val postExecutionThread: PostExecutionThread){
    fun execute() = repo.getData()
    .subscribeOn(Schedulers.from(threadExecutor))
    .observeOn(postExecutionThread.scheduler)
}

我可以使用下面的代码在observeOn方法中覆盖调度程序。

whenever(postExecutionThread.scheduler).thenReturn(Schedulers.trampoline())

但是我没有在subscribeOn方法中找到重写计划程序的方法。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以在测试代码中将ThreadExecutor的以下测试实现传递给UseCase的构造函数。实际上,这是一个工厂函数,在这种情况下,我更喜欢派生类(但您也可以使用派生类)。

fun immediateExecutor() : ThreadExecutor {
    return object : ThreadExecutor {
        override fun run(command: Runnable) {
            command.run()
        }
    }
}

它只是立即运行命令,这足以对用例进行单元测试。