我正在使用Mockito编写测试代码。
我正在使用RxJava和Retrofit从服务器获取资源。
mockRestService.get(id)方法返回Observable。
首先,请求调用返回状态为“未就绪”的项目。
因此,我应该使用Rx运算符“repeatWhen()”。
重试后,服务器将发送状态为“完成”的项目。
以下是我的演示者代码。
val getItem = restService.getItem(id)
.repeatWhen { it.delay(1000, TimeUnit.MILLISECONDS) }
.takeUntil { it.status == "complete" }
下面是我的测试代码。
为了模仿服务器行为,我在测试代码下面编写了代码。
@Test
fun printJobTest_one_job_normal_case() {
val notReadyItem = Item(status = "not ready")
val completeItem = Item(status = "complete")
Mockito.`when`(mockRestService.getItem(id))
.thenReturn(Observable.just(notReadyItem)) // First 2 response is "not ready" status
.thenReturn(Observable.just(notReadyItem))
.thenReturn(Observable.just(completeItem)) // Third response is "complete" status
// verify
}
为了模仿服务器行为,我使用了链接的“thenReturn()”方法。
但是,只会始终显示状态为“未就绪”的项目。
最佳答案
我...找到了解决方案。
这很简单...
下面的代码工作正常。
@Test
fun printJobTest_one_job_normal_case() {
val notReadyItem = Item(status = "not ready")
val completeItem = Item(status = "complete")
Mockito.`when`(mockRestService.getItem(id))
.thenReturn(Observable.just(notReadyItem, notReadyItem, completeItem))
// verify
}
我只是删除了链接方法“thenReturn”,并将变量移至Observable的参数。