如何正确测试订阅者是否在 onNext() (RxJava2) 中使用正确的数据调用

How correctly test if subscriber is called with correct data in onNext() (RxJava2)

我想测试这个方法:

void updateAvailableScreens() {
        safieCam.availableCameras()
                .flatMap(this::getAvailableScreensForCameras)
                // causing failure .observeOn(schedulers.mainThread())
                .subscribe(
                        screens -> {
                            view.setAvailablePagesOnViewPager(screens);
                            view.setAvailablePagesOnBottomSheet(screens);
                        },
                        Timber::e
                );
    }

通过此测试(因此给出已知数据,我希望使用预期的枚举列表调用视图):

@Test
public void widgetsShouldGetAllScreens() {
    when(camera.availableCameras()).thenReturn(
            Observable.just(Arrays.asList(
                    SafieCam.CameraType.SELFIE,
                    SafieCam.CameraType.REAR)));
    testedVPPresenter.updateAvailableScreens();

    List<ViewPagerView.Pages> pages = Arrays.asList(
            ViewPagerView.Pages.SELFIE,
            ViewPagerView.Pages.REAR_CAMERA,
            ViewPagerView.Pages.LOGIN);
    verify(view).setAvailablePagesOnViewPager(pages);
    verify(view).setAvailablePagesOnBottomSheet(pages);
}

但是当 observeOn 未被注释时,由于与 view 的零交互,测试将失败,否则它将成功。

需要的信息: schedulers 是接口包装器,所有调用的调度程序都在使用 TestScheduler 进行测试时被模拟。

提问:我是不是做错了什么?如果是这样,什么是正确的方法?

我误用了TestScheduler,因为我没有调用

testScheduler.triggerActions()

在使用测试调度程序之后(在我的例子中是在 testedVPPresenter.updateAvailableScreens() 之后)

因此所有事件都已排队,但没有执行。