unit-testing - 如何模拟改造服务可观察调用 onError?

标签 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()叫?

最佳答案

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

应该管用。请参阅以 here 开头的文档.

关于unit-testing - 如何模拟改造服务可观察调用 onError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141669/

相关文章:

c++ - 如何在boost中以编程方式获取测试结果

java - 在 JUnit 5 参数化测试中。 CSV 输入。有没有办法通过 Double.NaN、Double.POSITIVE_INFINITY?

mockito - 如何使用 PowerMockito 验证调用了 super 方法

java - HttpSession 联合测试

java - RxAndroid 和 Retrofit : Unable to create call adapter for io. reactivex.Observable<retrofit2.Response<okhttp3.ResponseBody>>

java - 将 ByteBuffer 流转换为 Rx 中的行的有效方法

unit-testing - 这有什么用

java - Mockito 模拟 restTemplate.postForEntity

java - 如何在 RxJava2 中并行执行消费者?

c++ - 对于 double 或 float 的总和,EXPECT_EQ 出错