我正在测试Rxjava2(2.0.7)的某些功能
并在单元测试中遇到麻烦
这是我的代码
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);
问题是此测试始终通过,但是我仍然可以找到日志中打印的异常
我究竟做错了什么?
最佳答案
您只需要切换执行顺序,并将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();
否则,在您调用
assertNoErrors()
运算符后,立即执行test()
并且该错误仍然不会在流中传播。通常,您应该首先使用
awaitXXX
来等待某些预期的事件发生,然后再使用assertXXX
对其进行测试。关于unit-testing - RxJava2:TestSubscriber.AssertNoErrors总是通过,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43694949/