J'ai cette méthode pour chercher résultat de la recherche de apidélai d'attente en ignorant Debounce dans tests unitaires
public void fetchSearchResults(Observable<String> searchObservable) {
searchObservable
.filter(search -> !TextUtils.isEmpty(search))
.debounce(700, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(search -> getView().showLoader)
.switchMap(search -> apiService.fetchSearchResults(search)) //Api call is executed on an io scheduler
.subscribe(consumer, errorConsumer);
}
et moi avons écrit ce test JUnit pour cette méthode:
@Test
public void fetchSearchResultsTest() {
TestScheduler testScheduler = new TestScheduler();
Observable<String> nameObservable = Observable.just("","FA")
.concatMap(search -> Observable.just(search).delay(100,
TimeUnit.MILLISECONDS, testScheduler));
testScheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS);
verify(view, never()).showLoader();
testScheduler.advanceTimeBy(100, TimeUnit.MILLISECONDS);
verify(view, never()).showLoader();
}
Mais le test échoue le dernier déclaration verify
avec le message
org.mockito.exceptions.verification.NeverWantedButInvoked
view.showLoader();
J'ai essayé passer un TestScheduler
à l'opérateur debounce
et le réglage du planificateur de calcul par défaut comme TestScheduler
par RxJavaPlugins
mais le résultat ne change pas, le test échoue encore.
Si le test échoue alors cela signifierait que l'opérateur debounce
envoie l'événement directement à travers lui en ignorant le délai d'attente passé dans ses arguments. Je ne sais pas si c'est correct mais c'est aussi loin que je comprends. Donc, ma question est comment puis-je réparer ce test et contrôler les événements de l'opérateur debounce
comme je le fais avec la source observable avec TestSchedulers
?
Où/quoi est la classe TestScheduler? – dazza5000