我无法理解为什么所有这些处理器都通过了测试但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
发出了某个值?
答案 0 :(得分:0)
摆脱传递给处理器的终端事件会有所帮助:
@Test public void behavior() {
final BehaviorProcessor<String> processor = BehaviorProcessor.create();
justFoo().concatWith(Flowable.never()).subscribe(processor);
processor.test().assertValue("foo");
}