Intereting Posts
Android – RoomDb – Объект, вставленный успешно не найден в выбранном запросе в другой активности Kotlinx вводит представление из неправильного расположения kodein, ввод данных в простой класс SocketException: сбой sendto: EBADF (дескриптор Bad файла) Как преобразовать исходный файл kotlin в исходный файл java Объединение обязательных и произвольных необязательных аргументов конструктора с Groovy Android WebView не загружает определенный URL-адрес Как использовать асинхронный Kotlin и ждать факториалов? Как создать заставку в tornadofx Когда экземпляр Kotlin (объявленный с помощью модификатора объекта) создается? Какое надлежащее обходное решение для @BeforeAll в Котлине Несколько значков желоба связанных файлов XML в Android Studio с Kotlin Что такое эквивалент Котлина для поразрядного или с присвоением '| ='? Как получить доступ к kotlin pojo в java-классе Как заставить функцию вернуть наблюдаемую

Как протестировать цепочку rxjava?

Привет, я создал реализацию, которая использует flatmap для объединения двух запросов вместе с конечным результатом, являющимся объектом ответа, возвращенным из второго запроса, и задающимся вопросом, можно ли издеваться над этими двумя цепными объектами ответа?

Вот основной код

delegator.requestOne(requestData) .flatMap ({ response -> if(response.isSuccessful){ cookieStorage.saveSessionCookies(response.header(cookieStorage.COOKIE_HEADER_NAME)!!) } delegator.requestTwo }) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(object : SingleObserver<ResponseTwo>() { @Override fun onSubscribe(Disposable d) { } @Override fun onSuccess(responseTwo :ResponseTwo) { callback.onSuccess(responseTwo) } @Override public void onError(Throwable e) { } }); 

Если бы у этого не было плоской карты и обработано только один запрос / ответ, я бы написал ниже, используя mockito

 Mockito.when(network.makeReq()).thenReturn(Single.just(responseOne)); 

Но как я могу сделать что-то вроде этого:

 Mockito.when(foodHygieneController.getLocalAuthorities()).thenReturn(Single.just(requestOne)).thenReturn(requestTwo)?? 

при условии, что requestOne и RequestTwo являются жестко закодированными макетными значениями моего выбора

Вы просто издеваетесь над каждым запросом (призывом к издеваемому объекту), который является частью вашей цепи Rx. В твоем случае:

 Mockito.when(delegator.requestOne(...)).thenReturn(...) Mockito.when(delegator.requestTwo(...)).thenReturn(...) / Mockito.when(delegator.requestTwo(responseOne)).thenReturn(...) 

Затем вы можете проверить, что «выход» (испускаемые элементы) из этой цепочки – это то, что вы ожидаете от них, например, с помощью TestSubscriber или в вашем примере, что callback вызывается с помощью ResponseTwo вы ожидаете / высмеиваете.

Цепочка Rx будет работать в вашем тесте точно так же, как при запуске кода «нормально».

То, что вы не можете сделать, – издеваться над поведением Rx-цепи, например, вы не можете издеваться над тем, как работает flatMap{} .