RxJava repeatWhen在Mockito中不再再次调用

时间:2018-11-29 07:38:14

标签: android junit kotlin mockito rx-java

我正在使用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()”方法。 但是,只会始终显示状态为“未就绪”的项目。

1 个答案:

答案 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的参数。