首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试有订阅的Flowable?

如何测试有订阅的Flowable?
EN

Stack Overflow用户
提问于 2020-03-10 21:36:25
回答 2查看 55关注 0票数 0

我知道TestSubscriber,它真的很有用,但有时会有与订阅Flowable相关的逻辑,这需要测试。

示例:

代码语言:javascript
复制
Flowable.just("Hello world!")
  .subscribe(s -> System.out.println(s),
    error -> {
      handler.handle("Scanning files");
    },
    () -> {
      handler.handle("Scanning files");
    }
  );

如果我想确保handler.handle("Scanning files")被调用,那么最好的方法是什么--唯一的方法是“传统的”模仿方法吗?

模拟的问题是,如果可流动对象更复杂,包括跨多个线程执行,则很难模拟时间推进等,这是使用TestSubscriber的一个很好的原因。

EN

回答 2

Stack Overflow用户

发布于 2020-03-10 22:14:15

一种方法是参数化Scheduler,并在设置测试夹具时传递TestScheduler

这样,您就可以使用advanceTimeBy等人的方法。

票数 0
EN

Stack Overflow用户

发布于 2020-03-10 22:19:11

您可以像往常一样使用Mockito验证您的处理程序是否已被调用:

代码语言:javascript
复制
verify(handler, only()).handle(any());

问题是,您如何确保在suscribe方法结束后调用前面的代码行?

我可以看到两个选项:

  • 调用blockingSubscribe而不是subscribe
  • 将所有线程处理程序更改为主线程(通过使用RxJavaPlugins)

也许你可以把Thread.sleep()放在验证之前,但我不认为这是个好主意。

对我来说,TestSubscriberTestScheduler是测试可观察性的最好方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60618768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档