如何一次向BehaviorSubject提供多个值

时间:2018-06-14 05:34:25

标签: java rx-java

我有一个isChanged函数,它会发出Observable<Boolean>。我定义了一个使用流的函数:

Observable<Boolean> myFunc() {
  return isChanged().skip(1).distinctUntilChanged();
}

现在,我想测试skip(1)是否按预期工作。所以我简单地创建了一个BehaviorSubject<Boolean> subject

BehaviorSubject<Boolean> subject = BehaviorSubject.create();

在我的测试功能中,我(使用适当的模拟和初始化):

when(isChanged()).thenReturn(subject);
subject.onNext(true);
subject.onNext(false);
myFunc().test().assertValueCount(1);

此断言失败,并且它提供的错误是预期值计数为1,而实际值为0.

当我删除skip()条件时,测试通过,这让我意识到它与断言仅检查主题的最新值有关。

对此不太清楚,任何帮助都将受到高度赞赏!

编辑: isChanged()实际上是自定义switch自定义函数的占位符。所以,我实际上有一个模拟该开关(称为switchMock),我的实际语句是when(switchMock.isChanged()).thenReturn(subject)。不确定这里是否需要具体细节。当然会很乐意提供更多信息!

1 个答案:

答案 0 :(得分:2)

BehaviorSubject包含一个项目,您在测试中覆盖了该项目,然后开始观察该主题。此时,主题将发出其单个值,该值将被skip删除,因此测试正确失败,没有项目。你必须先开始观察:

when(isChanged()).thenReturn(subject);

TestObserver<Boolean> to = myFunc().test();

subject.onNext(true);
subject.onNext(false);

to.assertValueCount(1);