Как сделать модификацию наблюдаемой синхронной

Я столкнулся с проблемой при написании тестовых случаев для вызова модификации.

Я хочу сделать модификацию наблюдаемой синхронной, чтобы тест прошел. В настоящее время выполнение тестового примера завершается до того, как приходит обратный вызов модификации, и, следовательно, тестовый пример завершается ошибкой.

Вот вызов модернизации:

**TestClient.getWeatherData(cityName)
    .observeOn(mainThreadSched)
    .subscribeOn(ioSched)
    .subscribe(this::onLoadSuccess, this::onLoadError);**

Я использую Dagger для внедрения планировщиков различных сетей для фактического и тестового кода следующим образом:

mainThreadSched set to **AndroidSchedulers.mainThread()** and 
ioSche set to **Schedulers.io()**

Для тестового кода:

mainThreadSched set to **Schedulers.immediate()** and 
ioSched set to **Schedulers.immediate()**

Тем не менее иногда тестовый пример дает сбой, хотя планировщик настраивается на Schedulers.immediate(). Я делаю что-то не так здесь? или есть ли альтернативный способ сделать это тестирование?


person Sivaji    schedule 28.06.2016    source источник
comment
Вы пробовали с Schedulers.trampoline()? immediate склонен к загадочным зависаниям, потому что это неправильный планировщик (спит и не поддерживает рекурсивное/реентерабельное использование).   -  person akarnokd    schedule 28.06.2016
comment
Взгляните на этот вопрос: stackoverflow.com/questions/36873806/ Вы можете использовать toBlocking или использовать TestSubscriber.awaitTerminalEvent().   -  person marwinXXII    schedule 29.06.2016
comment
удалите subscribeOn(ioSched) из своего кода. Так что все будет вызываться из самого основного потока   -  person Milind Mevada    schedule 05.07.2017


Ответы (1)


Вы можете добавить toBlock().first() в Observable.

person liang    schedule 10.07.2017