带有JUnit的RxJava2:测试中没有抛出异常

时间:2016-12-20 10:20:28

标签: android junit rx-java rx-java2

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

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

所以,问题是:如何在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();
      }
    });
  }

2 个答案:

答案 0 :(得分:6)

根据akarnokd这是RxJava2的具体问题。

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

可以使用此代码检查是否有任何错误

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;
}

答案 1 :(得分:0)

使用TestSubscriber

$().ready(function() {  
    $("input").autocomplete("Mrep_auto_complete.php", {    width: 200,max: 20,selectFirst: false});
});