我们正在使用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检查调用时间调用,但是测试变得非常难以阅读。
问题是:有没有更清洁的方法来进行这种测试?
答案 0 :(得分:3)
我们通常会添加一个
source
.doOnSubscribe(() -> counter.getAndIncrement())
.op()
.op()
...
在所需的地方,并在安静下来后检查计数器值。
请注意,我们有一个名为publish()
的运算符,可以确保源只订阅一次,并且它的所有副作用只发生一次(只要一次调用connect())。