有TestSubscriber
之类的东西。它有非常有用的功能,如awaitTerminalEvent()
,getOnNextEvents()
等。
TestSubscriber
的{{1}}是否等同于可能被固定在序列中间的某些可观察对象?
我想测试一些特定的案例,其中一个是:
我有一个在构造函数中接受Observable
的类。其中一个方法调用Observable
运算符中的Observable
。因此,在特定条件下执行主onErrorResumeNext
可能会调用经过测试的Observable
。需要Observable
之类的东西。
在上述情况下,我想测试assertExecuted
执行Thread
。
我想知道Observable
基于它的输入返回了什么。
每个案例都需要解决方法,如:
Observable
如果没有好的方法,如何使呼叫更清洁?
答案 0 :(得分:1)
断言需要在作为observable一部分的lambda之外进行测试,因为lambdas本身可能永远不会运行(就像你的onErrorResumeNext
情况一样)。所以你需要在observable之外定义一些对象来携带我们想要测试的结果。
测试可观察对象的常用技巧是使用Atomic对象来记录事件:
AtomicBoolean executed = new AtomicBoolean(false);
Observable
.empty()
.doOnNext(t -> executed.set(true))
.subscribe();
assertFalse(executed.get());
使用TestSubscriber
可以更好地完成此示例,但它显示了该技术。
rxjava-extras如果你使用的是java 6(heck只是使用retrolambda),那么就有了便利类,这样你就不需要为这个用例编写匿名类了:
AtomicBoolean executed = new AtomicBoolean(false);
Observable
.empty()
.doOnNext(Actions.setToTrue(executed))
.subscribe();
assertFalse(executed.get());