RxJava测试可观察

RxJava测试可观察,java,unit-testing,testing,rx-java,reactive-programming,Java,Unit Testing,Testing,Rx Java,Reactive Programming,有点像。它有非常有用的功能,如,等等 是否存在一个等价的 TEST订阅器 >代码>可观察到的? 我想测试一些具体案例,其中之一是: 我有一个类在构造函数中接受可观察的。它的一个方法调用Observable内部的onErrorResumeNext操作符。因此,在特定条件下执行mainObservable可能会调用testedObservable。需要类似于assertExecuted的内容 在上述情况下,我想测试线程上执行的可观察 我想知道,基于它的输入,什么是可观察的返回的 每种情况都需要解

有点像。它有非常有用的功能,如,等等

是否存在一个等价的<代码> TEST订阅器<代码> >代码>可观察到的? 我想测试一些具体案例,其中之一是:

  • 我有一个类在构造函数中接受
    可观察的
    。它的一个方法调用
    Observable
    内部的
    onErrorResumeNext
    操作符。因此,在特定条件下执行main
    Observable
    可能会调用tested
    Observable
    。需要类似于
    assertExecuted
    的内容

  • 在上述情况下,我想测试
    线程
    上执行的
    可观察

  • 我想知道,基于它的输入,什么是
    可观察的
    返回的

每种情况都需要解决,如:

observable
  .doOnNext(o -> {
      // Observable was given a value
   });

如果还没有好的方法可用,那么如何使上述调用更干净?

需要在lambda之外测试断言,因为lambda本身可能永远不会运行(就像您的
onErrorResumeNext
案例一样)。所以你需要一些在可观测范围之外定义的物体来携带我们想要测试的结果

测试可观测数据的常用技术是使用原子对象记录事件:

AtomicBoolean executed = new AtomicBoolean(false);
Observable
  .empty()
  .doOnNext(t -> executed.set(true))
  .subscribe();
assertFalse(executed.get());
使用
TestSubscriber
可以更好地完成此示例,但它展示了该技术

如果您使用的是java 6(heck just use retrolambda),则具有方便的类,因此您不需要为此用例编写匿名类:

AtomicBoolean executed = new AtomicBoolean(false);
Observable
  .empty()
  .doOnNext(Actions.setToTrue(executed))
  .subscribe();
assertFalse(executed.get());

感谢您指出
java.util.concurrent
包中的
Atomic
对象。因此,正如我所理解的,被测试的可观察对象必须
包装
,并添加操作符,如果我需要测试,它是否正确执行。谢谢你的回复。