如何正确测试订阅者是否在 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()
之后)
因此所有事件都已排队,但没有执行。
我想测试这个方法:
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()
之后)
因此所有事件都已排队,但没有执行。