Android 如何对Flowable.interval进行单元测试?
我在演示者中有以下代码Android 如何对Flowable.interval进行单元测试?,android,junit,rx-java,rx-java2,android-testing,Android,Junit,Rx Java,Rx Java2,Android Testing,我在演示者中有以下代码 公共类SignUpPresenter实现Presenter{ 私人合成可处置物品; 私人视野; @注入公共SignUpPresenter(){ } 公共无效集合视图(视图){ this.view=视图; } public void redirectToLoginScreen 1秒后(){ 一次性用品=RxUtil.initDisposables(一次性用品); view.displaySuccessMessage(); 一次性=可流动。间隔(1,时间单位。秒) .sub
公共类SignUpPresenter实现Presenter{
私人合成可处置物品;
私人视野;
@注入公共SignUpPresenter(){
}
公共无效集合视图(视图){
this.view=视图;
}
public void redirectToLoginScreen 1秒后(){
一次性用品=RxUtil.initDisposables(一次性用品);
view.displaySuccessMessage();
一次性=可流动。间隔(1,时间单位。秒)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(沿->查看.onRegistrationSuccessful(),查看::handleError);
一次性。添加(一次性);
}
@重写公共void dispose(){
RxUtil.处置(一次性);
}
公共界面视图扩展了Presenter.View{
void onRegistrationSuccessful();
void displaySuccessMessage();
}
}
您必须在流量设置后移动时间:
@Test public void shouldDisplaySuccessMessage() {
presenter.redirectToLogInScreenAfterOneSecond();
testScheduler.advanceTimeTo(1, TimeUnit.SECONDS);
Mockito.verify(view).displaySuccessMessage();
Mockito.verify(view).onRegistrationSuccessful();
}
此外,您不需要在间隔后使用那么多运算符,而是直接使用mainThread调度程序:
Disposable disposable = Flowable.interval(1, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.subscribe(aLong -> view.onRegistrationSuccessful(), view::handleError);
并替换主线程计划程序:
@Before public void setUp() {
testScheduler = new TestScheduler();
RxAndroidPlugins.setMainThreadSchedulerHandler(scheduler -> testScheduler);
presenter = new SignUpPresenter();
presenter.setView(view);
}
在
RedirectToLoginScreenScreeneAfterOneSecond()之后不提前时间代码>已设置流。另外,您使用了太多的调度运算符,而不是直接使用interval(mainThread)
。谢谢,将interval()移到presenter call下面后,它就可以工作了。我想我不需要Schedulers.io或?如果你愿意,你可以把它作为一个答案贴出来,这样我就可以接受了。