RxJava2 Completable未按预期进行组合
我的意图是能够通过管道传输一定数量的数据,但是,从下面的测试用例中可以看出,它不能像预期的那样工作RxJava2 Completable未按预期进行组合,java,rx-java,reactive-programming,rx-java2,reactive,Java,Rx Java,Reactive Programming,Rx Java2,Reactive,我的意图是能够通过管道传输一定数量的数据,但是,从下面的测试用例中可以看出,它不能像预期的那样工作 @测试 公共无效测试_和_then(){ Completable c1=Completable.fromAction(()->{ System.out.println(“”); }); Completable c2=Completable.fromAction(()->{ System.out.println(“”); 布尔检验=真; 如果(测试){ 抛出新异常(); } System.out.p
@测试
公共无效测试_和_then(){
Completable c1=Completable.fromAction(()->{
System.out.println(“”);
});
Completable c2=Completable.fromAction(()->{
System.out.println(“”);
布尔检验=真;
如果(测试){
抛出新异常();
}
System.out.println(“”);
});
Completable c3=Completable.fromAction(()->{
System.out.println(“”);
});
Completable.complete()
.及(c1)
.第三(c2)
.然后(c3)
.test()
.assertError(t->true)
.dispose();
c3.test().assertNotSubscribed();
}
这将产生以下输出
java.lang.AssertionError:已订阅!(闩锁=0,值=0,错误=0,完成=1)
如图所示,如果在前一个Completable中检测到错误,它似乎不应该订阅以后添加的任何Completable。
我的问题是,为什么要打印“”,基本上,Completable是运行的。我怎样才能避免这种情况,而只是简单地结束可编译文件链呢?
当文档表明不应该发生这种情况时,它为什么订阅Completable c3?实际上,它的工作方式与您预期的一样。但是,您正在订阅
c3
:
c3.test().assertNotSubscribed();
这将订阅c3
并打印
如果你去掉那条线,它会像你期望的那样工作
test()。不幸的是输出顺序——它使您认为流没有停止
编辑
关于“如果总是失败,assertNotSubscribed
的目的是什么”的评论
老实说,这是一个很大的误解test()
不是创建TestObserver
s的唯一方法。您可以像这样创建一个测试观察者
TestObserver<Void> testObserver = new TestObserver<>();
TestObserver TestObserver=newtestobserver();
您可以使用assertNotSubscribed
确保尚未订阅测试观察员。实际上,该方法应该检查subscribe
是否未被调用。这并不是为了测试调用了dispose()
对于这个场景,您必须执行类似于
assertTrue(testObserver.isDisposed())
的操作。您可以继续讨论。谢谢您的回答,您是正确的。但是,如果资产总是失败,那么它的目的是什么呢?你介意编辑你的答案来合并这个吗。