谁能告诉我为什么RxJava2(v2.2.4)中的share运算符不能按我的单元测试中的规定运行?

时间:2019-06-07 09:26:55

标签: java android kotlin rx-java2

基于对share运算符的理解,我编写了以下测试:

@Test
fun `share operator`() {
  val expectedInvocations = 1
  val counter = AtomicInteger()
  val shared = Completable.fromCallable { counter.incrementAndGet() }
    .toObservable<Any>()
    .share()
    .ignoreElements()

  Completable.merge(listOf(shared, shared)).test()

  assertThat(counter.get()).isEqualTo(expectedInvocations)
}

可以看出,我希望如果我共享一个可观察对象并且多个观察者同时进行订阅,则可调用对象将仅被调用一次。但是,当我运行此测试时,由于可调用项被调用两次,因此它失败。

1 个答案:

答案 0 :(得分:1)

http://reactivex.io/RxJava/javadoc/io/reactivex/Completable.html

  

合并(可迭代的来源)

     

返回一个Completable实例,该实例立即订阅所有源,并且仅在所有源Completables完成或其中一个发出错误时才完成。

一次订阅所有来源  和 仅在所有源完成项完成时完成

因此,两个可完成对象都将执行操作,使计数器变成2。


有趣的阅读说明分享:https://medium.com/mindorks/how-to-use-rxjava-share-operator-26b08973771a