覆盖 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()
}
}
}
它只是立即运行命令,这应该足以对您的用例进行单元测试。
在我的例子中,我已经看到 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()
}
}
}
它只是立即运行命令,这应该足以对您的用例进行单元测试。