2016-11-15 2 views
10

Je suis en train de migrer de Rx 1 à Rx 2 et tout à coup en lisant les messages, j'ai découvert que Single devrait être le type d'observable à utiliser pour les appels de retrofit.Y at-il quelque chose comme Single.empty()

J'ai donc décidé de tenter le coup et lors de la migration de nos appels d'adaptation vers Rx 2, j'ai également changé la valeur de retour en Single<whatever>.

Maintenant la question est, certains de nos tests, les services de réseau raillent quelque chose de similaire à:

when(userService.logout()).thenReturn(Observable.empty()) 

Comme vous pouvez le voir avant de migrer les appels que nous avons utilisé pour compléter simplement le flux en racontant la maquette userService à renvoie un observable vide.

Lors de la migration vers la Single « version » des appels que nous ne peut plus utiliser Observable.empty() parce que l'appel ne revient pas Observable, mais renvoie un Single.

J'ai fini par faire quelque chose comme:

when(userService.logout()).thenReturn(
        Single.fromObservable(Observable.<whatever>empty())) 

Mes questions sont les suivantes:

  1. Y at-il une meilleure façon de le faire? Est-ce que je manque quelque chose d'important que je devrais savoir? Quelque chose comme ça ne se comporte pas comme je m'y attendais.

Répondre

14

Single.empty() n'a aucun sens car Single doit avoir un seul élément ou une erreur. Vous pourriez simplement avoir gardé Observable ou commuté à Maybe qui permet le vide ou Completable qui n'émet aucun élément du tout.

1

Une solution de contournement, par ex. pour les tests seraient

Observable.<Whatever>empty().toSingle()

garder à l'esprit que cela ne remet pas les abonnés du tout.