Есть что-то вроде Single.empty()

Я сейчас перехожу из Rx 1 в Rx 2 и внезапно при чтении сообщений я обнаружил, что Single должен быть типом наблюдаемого для использования для переоборудования вызовов.

Итак, я решил сделать снимок и, мигрируя наши призывы к переориентации в Rx 2, также изменил возвращаемое значение на Single<whatever>.

Теперь проблема в том, что некоторые из наших тестов обманывают сетевые службы чем-то похожим на:

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

Как вы можете видеть перед мигрированием вызовов, которые мы использовали для простого завершения потока, сообщая userService mock, чтобы вернуть пустой наблюдаемый.

При переходе на Single "версию" вызовов мы больше не можем использовать Observable.empty(), потому что вызов не возвращает Observable, а возвращает Single.

В итоге я сделал что-то вроде:

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

Мои вопросы:

  • Есть ли лучший способ сделать это?
  • Мне не хватает ничего важного, что я должен знать - что-то вроде этого на самом деле не ведет себя так, как я ожидаю.

Ответ 1

Single.empty() не имеет смысла, потому что Single должен иметь один элемент или ошибку. Вы могли бы просто сохранить Observable или переключиться на Maybe, который разрешает пустую или Completable, которая вообще не выделяет элемент.

Ответ 2

Обходной путь, например. для тестов было бы

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

помните, что это вообще не вызывает подписчиков.