java – 为Rx v2 Flowable编写同步单元测试

weixin_38051062 2019-09-12 12:08:03
我正在将我的项目从Rx v1转换为Rx v2,我目前正在将一些v1 Observables改为v2 Flowables. (它在Android项目中使用Spock用Groovy编写的单元测试) 通常我会使用钩子覆盖调度程序.我仍然可以通过注册调度程序处理程序在v2中执行此操作.这使得Observables始终使用(new?)Schedulers.single()来实现同步.然而,由于背压机制(?),Flowables仍然是异步的. 我尝试使用以下方法解决这个问题: Flowable<LogEntry> flowable = Flowable.create(new FlowableOnSubscribe<LogEntry>() { @Override void subscribe(FlowableEmitter<LogEntry> emitter) throws Exception { for (def log : logs) { emitter.onNext(log) } emitter.onComplete() } }, FlowableEmitter.BackpressureMode.NONE); 但这仍然使它们异步. 我已经覆盖了这样的调度程序: RxJavaPlugins.reset() RxJavaPlugins.setIoSchedulerHandler(new Function<Scheduler, Scheduler>() { @Override Scheduler apply(Scheduler scheduler) throws Exception { return Schedulers.single() } }) RxAndroidPlugins.reset() RxAndroidPlugins.setMainThreadSchedulerHandler(new Function<Scheduler, Scheduler>() { @Override Scheduler apply(Scheduler scheduler) throws Exception { return Schedulers.from(new Executor() { @Override void execute(Runnable command) { command.run() } }) } }) 我似乎无法弄清楚为什么Observables像这样表现同步,但Flowables没有(在背压机制旁边)
...全文
58 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38060626 2019-09-12
  • 打赏
  • 举报
回复
Schedulers.single()是一个单线程异步调度程序.您需要Schedulers.trampoline()保留在同一个线程上.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧