Я пишу тестовый код с использованием 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 ().Но только всегда появляется предмет, который имеет статус «не готов».