【问题标题】:Test that RxJava BehaviorProcessor emits a value测试 RxJava BehaviorProcessor 是否发出一个值
【发布时间】:2017-12-26 18:45:42
【问题描述】:

我无法理解为什么所有这些处理器都通过了测试,但 Behavior 却没有:

package com.example;

import org.junit.Test;

import io.reactivex.Flowable;
import io.reactivex.processors.*;

public class ProcessorTest {
    private static Flowable<String> justFoo() {
        return Flowable.just("foo");
    }

    private static FlowableProcessor<String> subscribeToFoo(
            FlowableProcessor<String> processor) {
        justFoo().subscribe(processor);
        return processor;
    }

    @Test public void flowable() {  // pass
        justFoo().test().assertValue("foo");
    }

    @Test public void async() {  // pass
        subscribeToFoo(AsyncProcessor.create()).test().assertValue("foo");
    }

    @Test public void replay() {  // pass
        subscribeToFoo(ReplayProcessor.create()).test().assertValue("foo");
    }

    @Test public void unicast() {  // pass
        subscribeToFoo(UnicastProcessor.create()).test().assertValue("foo");
    }

    @Test public void behaviorFail() {  // fail
        subscribeToFoo(BehaviorProcessor.create()).test().assertValue("foo");
    }

    @Test public void behaviorPassing() {  // pass
        subscribeToFoo(BehaviorProcessor.create())
                .test()
                .assertNoValues()
                .assertSubscribed()
                .assertComplete()
                .assertNoErrors()
                .assertNoTimeout()
                .assertTerminated();
    }
}

文档说BehaviorProcessor 是:

向每个订阅的订阅者发送它观察到的最新项目和所有后续观察到的项目的处理器。

所以据我了解,它应该通过behaviorFail 测试,而不是behaviorPassing。这是怎么回事?

我如何编写一个有效的测试,以知道 BehaviorProcessor 发出了某个值?

【问题讨论】:

  • BehaviorProcessor 终止时,缓存的值不再可用于后期Subscribers。

标签: java unit-testing junit4 rx-java2


【解决方案1】:

摆脱传递给处理器的终端事件会有所帮助:

@Test public void behavior() {
    final BehaviorProcessor<String> processor = BehaviorProcessor.create();
    justFoo().concatWith(Flowable.never()).subscribe(processor);
    processor.test().assertValue("foo");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-07
    • 2021-05-10
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多