首页 > 解决方案 > 覆盖 RxAndroid 调度程序以进行测试

问题描述

我已经看到使用 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 方法中覆盖调度程序的方法。我该怎么做?

标签: androidtestingrx-java

解决方案


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

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

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


推荐阅读