Как не передавать данные Flowable для модульных тестов?

Итак, при запуске немного контекста о том, чего я хочу достичь:

У меня есть функция в классе DataManager именем getBusRoutesByQuery(query: String) который возвращает Flowable<List<Route>> . Этот поиск функции в локальном и удаленном хранилище для маршрутов шины по заданному запросу. Я использую zip для объединения двух потоков и объединения их в один без дубликатов. Но, например, когда пользователь будет использовать приложение в первый раз, у него не будет никаких данных в локальном источнике, поэтому zip не будет работать. Поэтому я нашел функцию onErrorReturn и я использую ее, когда не будет данных для возврата. onErrorReturn возвращает пустой список вместо ошибки, поэтому удаленный источник будет zip на пустых данных. И теперь, когда я использую в тесте Flowble.empty() для отображения ситуации, когда в локальном хранилище нет данных, тест не проходит.

Исходные условия :

  1. нет данных в локальном хранилище
  2. данные, доступные в удаленном хранилище
  3. getBusRoutesByQuery(query: String) вызывается из DataManager
  4. данные восстанавливаются

Теперь как это выглядит в коде:

 override fun getBusRoutesByQuery(query: String): Flowable<List<Route>> { val networkSourceWithSave: Flowable<List<Route>> = remoteBusDataManager .getBusRoutesByQuery(query) .doOnNext { localBusDataManager.insertBusRoutes(it) } .onErrorReturn { listOf() } val localSource: Flowable<List<Route>> = localBusDataManager .getBusRoutesByQuery(query) .onErrorReturn { listOf() } return Flowable.zip(localSource, networkSourceWithSave, BiFunction { local, remote -> mergeTwoListsWithoutDuplicates(local, remote) }) } 

и тест:

 @Test fun getRoutesByQueryWhenLocalSourceIsNotAvailable() { `when`(localBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.empty()) `when`(remoteBusDataManager.getBusRoutesByQuery(QUERY)).thenReturn(Flowable.just(ROUTES)) busDataManager.getBusRoutesByQuery(QUERY).subscribe(testSubscriber) testSubscriber.assertValue(ROUTES) } 

Так скажите мне, что я могу сделать с zip , когда данные локального хранилища недоступны и как я могу его проверить. Благодаря 😉

Ваша реализация неверна. Zip объединит 1: 1 в каждом потоке, см. Документацию: http://reactivex.io/documentation/operators/zip.html . Поскольку один из ваших потоков пуст, нет ничего, чтобы застегнуть молнию, и ничто не будет толкаться вниз по течению.

Вместо zipping я бы предложил слить и localSource.mergeWith(networkSourceWithSave).distinct() : localSource.mergeWith(networkSourceWithSave).distinct()