Prueba Espresso con RxLoader

Tengo una actividad que utiliza RxLoader para buscar datos del servidor en la creación de actividad, y puebla una vista de lista. También tengo código de prueba que intenta hacer clic en la primera fila de la vista de lista después de que se llena.

Debido a que estoy usando RxLoader, tengo que escribir un IdlingResource personalizado para Espresso. Sin embargo, el problema es que la prueba finaliza (falla) antes de que mi lista se llene.

Aquí está mi código de actividad:

RxLoaderManager.get(this).create( "my_loader", mRestService.loadData(), new RxLoaderObserver<MyData>() { @Override public void onNext(MyData data) { // populate listview with data here ... } }); 

Aquí está mi implementación de IdlingResource:

 public class IdlingApiServiceWrapper implements IdlingResource { public Observable<MyData> loadData(){ counter.incrementAndGet(); Observable<MyData> observable = api.loadData().finallyDo(new Action0() { @Override public void call() { counter.decrementAndGet(); notifyIdle(); } }); return observable; 

}}

El problema es que: Cuando ejecuto el código de prueba, el método "counter.decrementAndGet ()" siempre se llama antes del método "onNext ()" en mi actividad. Mi prueba falla porque espera listview para ser poblada.

Aparentemente estoy haciendo algo mal. ¿Pero qué estoy haciendo mal?

ACTUALIZAR:

Aquí hay un fragmento de código más limpio para ilustrar el problema:

  RxLoaderManager.get(this).create( "my_loader", myObservable.finallyDo(new Action0() { @Override public void call() { //log } }), new RxLoaderObserver<MyData>() { @Override public void onNext(MyData data) { // do something here } }).start(); 

En el código anterior, el fragmento de código dentro de finallyDo () se llama antes de la llamada "onNext ()" del observador. ¿Se supone que finallyDo () se llama después de "onNext ()"?

Evan Tatarka me indicó la dirección correcta: https://github.com/evant/rxloader/issues/14

Aquí está mi solución final:

 public class IdlingApiServiceWrapper implements IdlingResource { public Observable<MyData> loadData() { counter.incrementAndGet(); Observable<MyData> observable = api.loadData().finallyDo(new Action0() { @Override public void call() { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { counter.decrementAndGet(); notifyIdle(); } }); } }); return observable; } 

}

  • ¿Cómo administrar un DialogFragment con RxJava?
  • ¿Qué hilo es unSubscribeOn llamado? ¿Deberíamos llamarlo?
  • Prueba de unidad de presentador con RxJava CompositeSubscription
  • Hilo predeterminado de actualización
  • RxJava y datos almacenados en caché
  • ¿Cómo ejecutaría esta sentencia usando RxJava?
  • Cómo cancelar la solicitud con retofit2 y RxAndroid
  • Dar un RxJava Observable algo a emitir de otro método
  • Flatten Observable <Observable <Cursor >> Observable <Cursor>
  • Inter fragmento de comunicación utilizando rxjava
  • ¿Por qué Rxjava podría causar fugas de memoria?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.