Observable ist die finale Klasse, daher können wir keine Mocks erstellen, um Interaktionen daran zu verifizieren oder zu erfassen.So überprüfen Sie keine Interaktionen auf RxJava2 Observable mit Mockito
Und beobachtbare der test()
, TestSubscriber bietet auch keine eine solche Interaktion Behauptung techinque
ich im Cache gespeicherten Daten erstellt haben, ein generisches Verfahren zur Überprüfung vor
/**
* General parametrized method for loading data from service while checking connection
* and respecting reload state
*/
private <T> Observable<T> getData(Observable<T> dataSource, String key, boolean reload) {
T cachedData = (T) cacheModel.getValue(key);
// Do not use cache if reloading
if(!reload && cachedData != null)
return Observable.just(cachedData);
if(!utilModel.isConnected()) {
return Observable.error(new Throwable(Constants.NO_NETWORK));
}
return dataSource
.doOnNext(data -> cacheModel.saveObject(key, data))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
von Netzwerk laden Und es wie folgt verwendet:
@Override
public Observable<User> getOrganiser(boolean reload) {
return getData(eventService.getUser(authorization), ORGANIZER, reload);
}
Vorher rief ich nicht einmal eventService.getUser(...)
an, um das Observable zu bekommen, also konnte ich te st, wenn es nie aufgerufen wurde, aber jetzt, da ich es an die Template-Methode übergeben muss, muss ich es aufrufen, aber überprüfen, ob Cache vorhanden ist, mit der es nie interagiert.
Dies ist mein vorheriger Test, der offenbar jetzt
@Test
public void shouldLoadOrganizerFromCache() {
// Clear cache
objectCache.clear();
User user = new User();
objectCache.saveObject(RetrofitEventRepository.ORGANIZER, user);
// No force reload ensures use of cache
Observable<User> userObservable = retrofitEventModel.getOrganiser(false);
userObservable.test().assertNoErrors();
userObservable.test().assertValue(user);
verify(eventService, never()).getUser(auth);
}
Es wird starr im Laufe der Zeit, um die Interaktionen zu testen, die der Abonnent machen wird, und da ich gerade das Repository und nicht das Repository mit Presenter testet, wird die beobachtbare zurückgegeben nie tatsächlich abonniert, so dass ich nicht testen kann Und vielen Dank für Ihre Cache-Implementierung. Ich habe genau das gesucht, konnte es aber nicht finden. Ich wusste, dass es einen reaktiveren Weg geben würde. – iamareebjamal