gpt4 book ai didi

unit-testing - RxJava2 : TestSubscriber. AssertNoErrors 总是通过

转载 作者:行者123 更新时间:2023-11-28 20:38:34 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com