我已经看过RxImmediateSchedulerRule的用法来覆盖调度程序进行测试。但是,在我的情况下,由于我使用的是android10 cleanarchitecture github存储库中的另一种调度程序-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方法中重写Scheduler的方法,该怎么办呢?
最佳答案
您可以在测试代码中将ThreadExecutor
的以下测试实现传递给UseCase
的构造函数。实际上,这是一个工厂函数,在这种情况下,我更喜欢派生类(但您也可以使用派生类)。
fun immediateExecutor() : ThreadExecutor {
return object : ThreadExecutor {
override fun run(command: Runnable) {
command.run()
}
}
}
它只是立即运行命令,这足以对用例进行单元测试。
关于android - 覆盖RxAndroid调度程序进行测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54112887/