【问题标题】:How correctly test if subscriber is called with correct data in onNext() (RxJava2)如何正确测试是否在 onNext() (RxJava2) 中使用正确的数据调用订阅者
【发布时间】:2017-07-25 14:11:11
【问题描述】:

我想测试一下这个方法:

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 进行测试时模拟。

问题:我在这里做错了吗?如果是这样,什么是正确的方法?

【问题讨论】:

    标签: android unit-testing rx-java2


    【解决方案1】:

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

    testScheduler.triggerActions()

    在使用测试调度程序之后(在我的情况下是在 testedVPPresenter.updateAvailableScreens() 之后)

    所以所有事件都排队,但没有执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多