RxJava2 switchIfEmpty y verificando una ejecución

así que imagina que tengo un método de build así:

LocalDatabase:

public Observable<PoiObject> getPoiObject() { return Observable.defer { PoiObject object = poiDao.getPoiObject(); if(object == null) { return Observable.empty(); } else { return Observable.just(object); } } } 

ahora, tengo otro método en otro lugar que dice así:

Servicio:

 public Observable<PoiObject> getPoiObject() { return localDatabase.getPoiObject() } public Observable<PoiObject> getItFromWeb() { return restService.getObject() } 

si trato de encadenar la llamada de Service :: getPoiObject en una llamada Rx como esta:

Usecase:

 public Observable<SomeVM> getObject() { return service.getPoiObject() .switchIfEmpty(service.getItFromWeb()) } 

Luego falla la siguiente testing unitaria:

 @Test public void test_getObject() { Service service = mock() when(service.getPoiObject()).thenReturn(any()); Observable<SomeVM> observable = usecase.getObject(); verify(service).getPoiObject(); verify(service, times(0)).getItFromWeb(); } 

¿Por qué getItFromWeb () ejecutar cuando claramente, la llamada anterior no está vacía (el object se devuelve desde la llamada a service.getPoiObject ()). ¿Hay alguna otra estrategia para probar en el switchIfEmpty?

Abrir un corsé no hace mágicamente que el código / variable más allá se inicialice de manera perezosa. Lo que escribiste es esto:

 public Observable<SomeVM> getObject() { Observable o1 = service.getPoiObject(); Observable o2 = service.getItFromWeb(); // <------------------- Observable o3 = o1.switchIfEmpty(o2); return o3; } 

Ya hiciste el trabajo razonable en getPoiObject() ejecución, que también debes aplicar en getObject() :

 public Observable getObject() { return service.getPoiObject() .switchIfEmpty(Observable.defer(() -> getItFromWeb())); } 
  • Cómo manejar el event handling errores en un solo lugar en rxjava usando wrapper
  • El suscriptor RxJava2 PublishSubject no puede recibir elementos cuando se le llama desde varios hilos usando SingleScheduler
  • Mockito never () no funciona con andThen rxjava2
  • ¿Cómo escalar dinámicamente el rebote de la stream de emisión de ráfagas?
  • Retrofit-Vertx con RxJava2 en Kotlin IllegalStateException message == null
  • Invoque RxJava2 cancelable / desechable del hilo correcto
  • HttpException no capturado por onError ()
  • Convert Maybe to Single de otra fuente si Maybe completa
  • Utilice la unidad de Kotlin (o cualquier otro object) escriba en el layout de Android
  • ¿Por qué mi configuration de RxJava está bloqueando mi subprocess de interfaz de usuario? Trabajar con la callback BluetoothAdapter.startLeScan
  • RxJava Observable.create envolver suscripciones observables