android - 覆盖 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 方法中覆盖调度程序的方法。我该怎么做?
解决方案
您可以在测试代码中将以下测试实现传递ThreadExecutor
给您的构造函数。UseCase
这实际上是一个工厂函数,在这种情况下我更喜欢派生类(但您也可以使用派生类)。
fun immediateExecutor() : ThreadExecutor {
return object : ThreadExecutor {
override fun run(command: Runnable) {
command.run()
}
}
}
它只是立即运行命令,这足以对您的用例进行单元测试。
推荐阅读
- python-3.x - Python - 使用 Tika 和 Gensim 提取文本并汇总目录中的多种文件类型
- r - 编写一个 tidyeval 函数来重命名 dplyr 中的因子级别
- hibernate - Grails 单元测试失败:此 GORM 实现目前不支持基于字符串的查询,如 [executeQuery]
- c++ - 了解 vtkSmartPointers
- php - 根据类型(文本、复选框、选择等)以适当的布局显示问题无法正常工作
- sql - SQL 运行总组与总阈值重置
- swift - 在方法中使用类作为泛型类型参数
- javascript - 在所有表单字段不为空后反应启用按钮
- mysql - 8. 0.11 - 安装程序错误 - 验证方法
- angular5 - 如何在 elasticsearch.js 客户端中排除主机中的端口号