我有一个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)
。不确定这里是否需要具体细节。当然会很乐意提供更多信息!
答案 0 :(得分:2)
BehaviorSubject
包含一个项目,您在测试中覆盖了该项目,然后开始观察该主题。此时,主题将发出其单个值,该值将被skip
删除,因此测试正确失败,没有项目。你必须先开始观察:
when(isChanged()).thenReturn(subject);
TestObserver<Boolean> to = myFunc().test();
subject.onNext(true);
subject.onNext(false);
to.assertValueCount(1);