Unit testing RxJava2:TestSubscriber.AssertNoErrors始终通过

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

我正在测试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);
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
对其进行测试