web-dev-qa-db-fra.com

Existe-t-il quelque chose comme Single.empty ()

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 mise à niveau.

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

Maintenant, le problème est que certains de nos tests se moquent des services réseau de manière similaire à:

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

Comme vous pouvez le voir avant de migrer les appels, nous avons utilisé pour terminer simplement le flux en disant à la maquette userService de retourner un observable vide.

Lors de la migration vers la Single "version" des appels, nous ne pouvons plus utiliser Observable.empty() car l'appel ne renvoie pas de 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:

  1. Existe-t-il une meilleure façon de le faire?
  2. Suis-je en train de manquer quelque chose d'important que je devrais savoir - quelque chose comme ça ne se comporte pas comme je m'y attendais.
19
Fred

Single.empty() n'a aucun sens car Single doit avoir un seul élément ou une erreur. Vous auriez pu simplement conserver Observable ou basculer sur Maybe qui autorise vide ou Completable qui n'émet aucun élément.

28
akarnokd

Une solution de contournement, par exemple pour les tests serait

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

gardez à l'esprit que cela n'appelle pas du tout les abonnés.

7
Florian Wolf