我正在测试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);
问题是这个测试总是通过,但我仍然可以在日志
中找到异常我做错了什么?
答案 0 :(得分:1)
您只需要切换执行顺序,并将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
进行测试。