gpt4 book ai didi

android - RxJava2 与 JUnit : no exceptions thrown in tests

转载 作者:太空狗 更新时间:2023-10-29 16:12:38 26 4
gpt4 key购买 nike

下面的代码在 JUnit 环境中运行时不会崩溃。但是在应用程序中运行时它会崩溃。我可以在控制台中看到错误日志,但测试标记为已通过。

  @Test
public void test() {
Observable observable = Observable.error(new RuntimeException());
observable.subscribe();
}

所以,问题是:如何让它在 JUnit 中崩溃。因为是的,如果某些东西在应用程序中不起作用,那么如果它在单元测试中也不起作用也是一件好事 :)

在这个例子中,我可以直接访问可观察对象。但在我的真实测试中,我没有那个。真正的可观察对象只是被测试类的内部细节。我最多能做的就是注入(inject)调度程序或其他东西。

那么,如何在无法直接访问可观察对象的情况下使其崩溃?

另外,我刚刚检查过这段代码也没有崩溃:

  @Test
public void test() {
Observable observable = Observable.error(new RuntimeException());
observable.subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
throw new RuntimeException();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throw new RuntimeException();
}
});
}

最佳答案

根据 akarnokd 的说法,这是 RxJava2 特有的问题。

“这样的用法在 2.x 中不再同步抛出,而是在错误的插件处理程序中结束。”

可以检查这段代码是否抛出任何错误

public static List<Throwable> trackPluginErrors() {
final List<Throwable> list = Collections.synchronizedList(new ArrayList<Throwable>());

RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
@Override
public void accept(Throwable t) {
list.add(t);
}
});

return list;
}

关于android - RxJava2 与 JUnit : no exceptions thrown in tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41239959/

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