测试可观察性仅评估一次

时间:2015-09-21 11:33:59

标签: java unit-testing rx-java

我们正在使用rx-java,但我们有一个问题是测试Observable只被评估一次。

我们有以下服务签名:

class A {
  Observable<String> computeA();
}

class B {
  Observable<Void> computeB(String inputA)
}

class C {
  Observable<Void> computeC(String inputA)
}

在我们的例子中,我们有一个调用服务A的服务,我们使用这个服务的结果作为另外两个服务B和C的输入。我们想检查服务A只调用一次。

我们尝试使用AtomicInteger作为模拟Observable of service A的计数器,或者只是模拟Observable.OnSubscribe检查调用时间调用,但是测试变得非常难以阅读。

问题是:有没有更清洁的方法来进行这种测试?

1 个答案:

答案 0 :(得分:3)

我们通常会添加一个

source
.doOnSubscribe(() -> counter.getAndIncrement())
.op()
.op()
...

在所需的地方,并在安静下来后检查计数器值。

请注意,我们有一个名为publish()的运算符,可以确保源只订阅一次,并且它的所有副作用只发生一次(只要一次调用connect())。

相关问题