我正在从Rx 1迁移到Rx 2,突然在阅读帖子时我发现Single应该是用于改装调用的可观察类型。
所以我决定尝试一下,在将我们的改装调用迁移到Rx 2时,我也将返回值更改为Single<whatever>
。
现在的问题是,我们的一些测试模拟网络服务类似于:
when(userService.logout()).thenReturn(Observable.empty())
正如您在迁移调用之前所看到的那样,我们通过告诉userService
mock返回一个空的observable来简单地完成流。
在迁移到调用的Single
“版本”时,我们不再可以使用Observable.empty()
,因为调用不返回Observable
,但返回Single
。
我最终做了类似的事情:
when(userService.logout()).thenReturn(
Single.fromObservable(Observable.<whatever>empty()))
我的问题是:
Single.empty()
毫无意义,因为Single
必须有一个项目或错误。你可以保持Observable
或切换到Maybe
,它允许空或Completable
,它根本不会发射物品。
解决方法,例如对于测试将是
Observable.<Whatever>empty().toSingle()
请记住,这根本不会调用订阅者。