RxJava повторить, когда не перезвонил в Mockito - PullRequest
0 голосов
/ 29 ноября 2018

Я пишу тестовый код с использованием 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 голосов
/ 29 ноября 2018

Я ... нашел решение.Это просто ... Чуть ниже код работает нормально.

@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.

...