测试从rx调用的方法

时间:2016-12-03 09:20:17

标签: android mvvm mockito retrofit rx-java

我创建了一个从web-service接收一些数据的方法,我正在使用retrofitrx,我使用juintmockito来测试我的代码。我可以很好地测试这种方法,但在onCompleted的{​​{1}}方法中,我正在调用另一种方法( saveToDatabase

如何分离这种依赖?我不想在我的测试中调用此方法,请参阅下面的代码:

rx

这是我的考验:

subscription = githubService.publicRepositories(username)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(application.defaultSubscribeScheduler())
                .subscribe(new Subscriber<List<Repository>>()
                {
                    @Override
                    public void onCompleted()
                    {

                        progressVisibility.set(View.INVISIBLE);
                        if (!repositories.isEmpty())
                        {
                            recyclerViewVisibility.set(View.VISIBLE);
                        }
                        else
                        {
                            infoMessage.set(context.getString(R.string.text_empty_repos));
                            infoMessageVisibility.set(View.VISIBLE);
                        }

                        //THIS METHOD SHOULD NOT BE CALLED IN MY TEST, I WANT TO VERIFY IT
                        saveToDatabase(MainViewModel.this.repositories);
                    }

                    @Override
                    public void onError(Throwable error)
                    {
                        Log.e(TAG, "Error loading GitHub repos ", error);
                        progressVisibility.set(View.INVISIBLE);
                        if (isHttp404(error))
                        {
                            infoMessage.set(context.getString(R.string.error_username_not_found));
                        }
                        else
                        {
                            infoMessage.set(context.getString(R.string.error_loading_repos));
                        }
                        infoMessageVisibility.set(View.VISIBLE);
                    }

                    @Override
                    public void onNext(List<Repository> repositories)
                    {
                        MainViewModel.this.repositories = repositories;
                    }
                });

1 个答案:

答案 0 :(得分:0)

无法不在测试中调用此方法。相反,添加到您的类数据库依赖并模拟它。 E.g:

//in your class
DataBaseClass databaseClass = new ...
...
dataBaseClass.save(...);

//in your test
@Mock DataBaseClass databaseClass;