我创建了一个从web-service
接收一些数据的方法,我正在使用retrofit
,rx
,我使用juint
和mockito
来测试我的代码。我可以很好地测试这种方法,但在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;
}
});
答案 0 :(得分:0)
您无法不在测试中调用此方法。相反,添加到您的类数据库依赖并模拟它。 E.g:
//in your class
DataBaseClass databaseClass = new ...
...
dataBaseClass.save(...);
//in your test
@Mock DataBaseClass databaseClass;