0
에서 호출하는 방법은 내가 retrofit
, rx
를 사용하고, 나는 시험에 juint
및 mockito
내 코드를 사용하고, web-service
에서 일부 데이터를 수신하는 방법을 만들었습니다. 나는 아주 잘이 방법을 테스트 할 수 있지만 rx
의 onCompleted
방법, 나는 다른 방법 (이을 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;
}
});
을하고 내 테스트입니다 :
String username = "usernameWithRepos";
TextView textView = new TextView(application);
textView.setText(username);
List<Repository> mockRepos = MockModelFabric.newListOfRepositories(10);
doReturn(rx.Observable.just(mockRepos)).when(githubService).publicRepositories(username);
mainViewModel.onSearchAction(textView, EditorInfo.IME_ACTION_SEARCH, null);
verify(dataListener).onRepositoriesChanged(mockRepos);
assertEquals(mainViewModel.infoMessageVisibility.get(), View.INVISIBLE);
assertEquals(mainViewModel.progressVisibility.get(), View.INVISIBLE);
assertEquals(mainViewModel.recyclerViewVisibility.get(), View.VISIBLE);