Модульное тестирование RxJava для Observable.Interval, ошибка «Контекст изменился» - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь написать модульные тесты для блока кода ниже:

Observable.interval(INITIAL_DELAY, REFRESH_PERIOD, TimeUnit.SECONDS)
            .flatMap {thisMethodReturnsAnObservable()}
            .subscribeOn(Schedulers.io()) 
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(this::onDataLoaded, this::onError)
            .disposeLater()) 

У меня есть тестовое правило, которое переопределяет RxSchedulers с testSchedulers, которое работает.

Важно тесты могут выполняться один за другим, но не все вместе, также запуск с покрытием нарушается с той же ошибкой.

Ошибка, которую я получаю, заключается в том, что выполнение теста немедленно останавливается, когда отладчик срабатываетonDataLoaded и отображает следующее сообщение:

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Добавление ComputationSchedulerHandler в мое тестовое правило решило мою проблему.

0 голосов
/ 16 мая 2019

По умолчанию Observable.interval запускается в планировщике вычислений. Поэтому вам нужно будет использовать перегрузку Observable.interval, которая использует планировщик, или добавить Schedulers.computation в ваше правило теста.

Observable.interval(INITIAL_DELAY, REFRESH_PERIOD, TimeUnit.SECONDS, [Your scheduler here])

Документация Observable.interval

...