Почему методы представления не вызываются в Observable, который находится внутри презентатора в модульном тесте? - PullRequest
0 голосов
/ 04 октября 2018

Я новичок в модульном тестировании Android, и в настоящее время мы используем MVP + RxJava + Dagger 2. Я написал этот тест, который не проходит в модульном тесте, но работает в рабочем коде:

@Override
public void retrieveListOfBillers() {
    getMvpView().showLoading();
    getCompositeDisposable().add(
        getDataManager()
            .doServerGetBillersList()
            .observeOn(getSchedulerProvider().ui())
            .subscribeOn(getSchedulerProvider().io())
            .subscribe( response ->{
                for (Datum data : response.getData()) {
                    getMvpView().setUpRecyclerView(enrollmentBillers);
                    getMvpView().showDefaultViews();
                    getMvpView().hideLoading();
                }, throwable -> {
                    ...

И этокак я это делаю в тесте:

@Test
public void testGetListOfBillersCallsSetupRecyclerView(){
    mPresenter.retrieveListOfBillers();
    verify(mView).showLoading();
    verify(mView).setUpRecyclerView(anyList());
}

Вот как я описал настройку для теста:

@Before
public void setUp() {
    // Mockito has a very convenient way to inject mocks by using the @Mock annotation. To
    // inject the mocks in the test the initMocks method needs to be called.
    MockitoAnnotations.initMocks(this);
    CompositeDisposable compositeDisposable = new CompositeDisposable();
    mTestScheduler = new TestScheduler();
    testSchedulerProvider = new TestSchedulerProvider(mTestScheduler);
    mPresenter = new CreateBillerContactPresenter<>(
            dataManager,
            testSchedulerProvider,
            compositeDisposable
    );
    mPresenter.onAttach(mView);


when(dataManager.doServerGetBillersList()).thenReturn(Observable.just(getBillerListResponse));

Я считаю, что это как-то связано с TestScheduler, но мне нужнокто-то, кто действительно знает, в чем здесь проблема, поэтому мой тестовый код не может вызвать setupRecyclerView и другие ожидаемые вызовы методов представления от докладчика?

1 Ответ

0 голосов
/ 04 октября 2018

Я нашел ответ: Кажется, у класса TestScheduler есть метод triggerAction, в котором:

"Запускает любые действия, которые еще не были запущены и которые запланированы на запуск в настоящее время или перед настоящим планировщиком.время."- из комментариев выше метода.

Затем презентатор / менеджер данных вызывает методы представления, как и ожидалось.

...