覆盖 RxAndroid 调度程序以进行测试

Overriding RxAndroid Schedulers For Testing

在我的例子中,我已经看到 RxImmediateSchedulerRule 用于覆盖 testing.But 的调度程序,它不起作用,因为我正在使用另一种调度程序 - 来自 android10 cleanarchitecture github回购。

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 中覆盖调度程序的方法method.How我可以这样做吗?

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

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

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