Dmi*_*nko 2 junit android rx-java rx-java2
在JUnit环境中运行时,下面的代码不会崩溃.但它在应用程序中运行时崩溃了.我可以在控制台中看到错误日志,但测试标记为已通过.
@Test
public void test() {
Observable observable = Observable.error(new RuntimeException());
observable.subscribe();
}
Run Code Online (Sandbox Code Playgroud)
所以,问题是:如何在JUnit中使其崩溃.因为是的,如果某些内容在应用程序中不起作用,如果它在单元测试中也不起作用也是一件好事:)
在这个例子中,我可以直接访问observable.但在我的真实测试中,我没有那个.真正的可观察性只是被测试的类的内部细节.我能做的最多的事情就是注入调度程序或其他东西.
那么,如何在没有直接访问observable的情况下使其崩溃?
另外,我刚检查过这段代码也没有崩溃:
@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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
根据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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1022 次 |
最近记录: |