32

我正在从 Rx 1 迁移到 Rx 2 的过程中,突然在阅读帖子时我发现Single应该是用于改造调用的 observable 类型。

所以我决定试一试,在将改造调用迁移到 Rx 2 时,我还将返回值更改为Single<whatever>.

现在的问题是,我们的一些测试模拟了类似于以下内容的网络服务:

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

正如您在迁移调用之前看到的那样,我们过去只是通过告诉userService模拟返回一个空的 observable 来完成流。

在迁移到Single调用的“版本”时,我们不再可以使用Observable.empty(),因为调用不返回 an Observable,而是返回 a Single

我最终做了类似的事情:

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

我的问题是:

  1. 有没有更好的方法来做到这一点?
  2. 我是否遗漏了任何我应该知道的重要信息——这样的事情实际上并不像我期望的那样。
4

2 回答 2

36

Single.empty()没有意义,因为Single必须有一个项目或一个错误。您可以保留Observable或切换到Maybe哪个确实允许空或Completable根本不发出项目。

于 2016-11-15T17:05:46.663 回答
11

例如测试的解决方法是

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

请记住,这根本不会调用订阅者。

于 2017-07-25T13:51:01.617 回答