我正在使用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()”方法。 但是,只会始终显示状态为“未就绪”的项目。
答案 0 :(得分:0)
我...找到了解决方案。 这简单... 只需下面的代码即可正常工作。
@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的参数。