У меня есть активность, которая использует RxLoader для извлечения данных с сервера при создании активности и заполняет представление списка. У меня также есть тестовый код, который пытается щелкнуть первую строку списка после того, как он заселен.Тест эспрессо с RxLoader
Поскольку я использую RxLoader, я должен написать индивидуальный IdlingResource для Espresso. Однако проблема заключается в том, что тест заканчивается (сбой) до того, как мой список будет заполнен.
Вот мой код активность:
RxLoaderManager.get(this).create(
"my_loader",
mRestService.loadData(),
new RxLoaderObserver<MyData>() {
@Override
public void onNext(MyData data) {
// populate listview with data here
...
}
});
Вот моя реализация 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;
} }
Проблема заключается в том, что: При запуске тестового кода, метод «counter.decrementAndGet()» всегда вызывается перед методом «onNext()» в моей деятельности. Мой тест терпит неудачу, потому что он ожидает, что список будет заполнен.
Видимо, я делаю что-то неправильно. Но что я делаю неправильно?
UPDATE:
Вот уборщик фрагмент кода, чтобы проиллюстрировать эту проблему:
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();
В коде выше фрагмент кода в finallyDo() вызывается перед "onNext()" звонок наблюдателя. Должен ли finallyDo() вызываться после «onNext()»?