我正在测试 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/