如何模拟调用onError的改进服务observable?

时间:2016-05-10 14:38:06

标签: unit-testing mockito rx-java retrofit2 rx-android

我正在测试此代码。

service.getProducts()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<Result<Catalog<SoajsProductPreview>>>() {

                @Override
                public void onError(Throwable e) {
                    view.showErrorView(e);
                }

                @Override
                public void onNext(Result<Product>  products) {
                   view.showProducts(products)
                }

                @Override
                public void onCompleted() {}
            });

测试view.showProducts()模拟服务返回结果的效果很好。 我做了

when(service.getProducts().thenReturn(someObservable);

现在我想测试服务引发错误时调用view.ShowErrorView(),但我找不到办法:

显然以下没有编译

when(service.getProducts().thenReturn(someException); 

这会立即引发异常,但不会调用订阅者onError方法

when(service.getProducts().thenReturn(someException); 

如何调用Subscriber.onError()

1 个答案:

答案 0 :(得分:13)

when(service.getProducts().thenReturn(Observable.error(someException))

应该有效。请参阅以here开头的文档。