RxJava2:TestSubscriber.AssertNoErrors 总是通过
RxJava2: TestSubscriber.AssertNoErrors always pass
我正在测试 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
.
来测试它。
我正在测试 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
.