Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何对Flowable.interval进行单元测试?_Android_Junit_Rx Java_Rx Java2_Android Testing - Fatal编程技术网

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或?如果你愿意,你可以把它作为一个答案贴出来,这样我就可以接受了。