Android RxJava测试“可观测重复”在测试中创建无限循环
我已将我的Android RxJava测试“可观测重复”在测试中创建无限循环,android,unit-testing,kotlin,mockito,rx-java,Android,Unit Testing,Kotlin,Mockito,Rx Java,我已将我的ViewModel设置为以这种方式无休止地重复API调用: useCase.fireAPICall(params) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .repeat() .delay(1, TimeUnit.SECONDS) .subscribe(::onSuccess, ::onFailed) 在我的单元测试中,我试图模拟API调用,并检查V
ViewModel
设置为以这种方式无休止地重复API调用:
useCase.fireAPICall(params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.repeat()
.delay(1, TimeUnit.SECONDS)
.subscribe(::onSuccess, ::onFailed)
在我的单元测试中,我试图模拟API调用,并检查ViewModel
中的LiveData
(在::OnSuccess
方法中更新)是否相应更新
工作测试故障的单元测试:
val error = Throwable("")
// Arrange
Mockito.`when`(repo.apiCall(params))
.thenReturn(Single.error(error))
// Act
viewModel.init()
// Verify
Mockito.verify(postDetailsViewStateObserver)
.onChanged(Error(error))
**非工作:*f相反,我尝试使用以下命令模拟来自该API调用的有效响应:
// Arrange
Mockito.doReturn(Single.just(Success(result, list)))
.`when`(repo).apiCall(params)
然后,ViewModel
repeat()
会生成一个无休止的循环,它会阻止我的单元测试,而不会完成它
问题:我们如何通过检查观察到的第一件事情来测试
repeat()
情况?您需要为延迟提供一个调度程序,以利用测试时间,例如:
val testScheduler = TestScheduler()
RxJavaPlugins.setComputationSchedulerHandler { testScheduler }
在调用testScheduler.advanceTimeBy(1,TimeUnit.SECONDS)
之后,您将前进一秒钟。要使其正常工作,您可能还应该更改顺序,delay
应该在repeat
之前
您需要
setComputesSchedulerHandler
,因为默认情况下delay
使用此计划程序。您必须在测试中缩短序列。重复
实际上是在延迟
之后。那是一个糟糕的复制粘贴。谢谢你的回复,它成功了!