Unit testing RxJava2:TestSubscriber.AssertNoErrors始终通过
我正在测试Rxjava2(2.0.7)的一些特性 在单元测试中遇到了一些问题 这是我的密码Unit testing RxJava2:TestSubscriber.AssertNoErrors始终通过,unit-testing,testing,rx-java2,Unit Testing,Testing,Rx Java2,我正在测试Rxjava2(2.0.7)的一些特性 在单元测试中遇到了一些问题 这是我的密码 RxJavaPlugins.setErrorHandler(null); Observable<String> o = Observable.create((ObservableOnSubscribe<String>) e -> { String s = System.currentTimeMillis() + ""; Syst
RxJavaPlugins.setErrorHandler(null);
Observable<String> o = Observable.create((ObservableOnSubscribe<String>) e -> {
String s = System.currentTimeMillis() + "";
System.out.println("runing observable@" + s);
throw new RuntimeException();
}).delay(1, TimeUnit.SECONDS);
o
.doOnNext(x -> {
System.out.println(x);
throw new RuntimeException();
})
.doOnError(e->e.printStackTrace())
.test()
.assertNoErrors()
.awaitCount(1)
.awaitDone(5, TimeUnit.SECONDS);
RxJavaPlugins.setErrorHandler(null);
可观察的o=可观察的。创建((可观察订阅)e->{
字符串s=System.currentTimeMillis()+“”;
System.out.println(“运行可观察@”+s);
抛出新的RuntimeException();
}).延迟(1,时间单位秒);
o
.doOnNext(x->{
系统输出println(x);
抛出新的RuntimeException();
})
.doError(e->e.printStackTrace())
.test()
.assertNoErrors()
.统计数字(1)
.等待完成(5,时间单位秒);
问题是这个测试总是通过的,但我仍然可以在日志中找到打印的异常
我做错了什么?您只需切换执行顺序,并将
assertNoErrors()
放在末尾
RxJavaPlugins.setErrorHandler(null);
Observable<String> o = Observable.create((ObservableOnSubscribe<String>) e -> {
String s = System.currentTimeMillis() + "";
System.out.println("runing observable@" + s);
throw new RuntimeException();
})
.delay(1, TimeUnit.SECONDS);
o
.doOnNext(x -> {
System.out.println(x);
throw new RuntimeException();
})
.doOnError(e -> e.printStackTrace())
.test()
.awaitCount(1)
.awaitDone(5, TimeUnit.SECONDS)
.assertNoErrors();
RxJavaPlugins.setErrorHandler(null);
可观察的o=可观察的。创建((可观察订阅)e->{
字符串s=System.currentTimeMillis()+“”;
System.out.println(“运行可观察@”+s);
抛出新的RuntimeException();
})
.延迟(1,时间单位秒);
o
.doOnNext(x->{
系统输出println(x);
抛出新的RuntimeException();
})
.doError(e->e.printStackTrace())
.test()
.统计数字(1)
.等待完成(5,时间单位。秒)
.assertNoErrors();
否则,assertNoErrors()
在调用test()
操作符后立即执行操作,错误仍然没有在流中传播。一般来说,您应该首先使用
awaitXXX
等待某个预期事件发生,然后使用assertXXX
对其进行测试