Как установить ответ по умолчанию для MockWebServer? - PullRequest
0 голосов
/ 11 сентября 2018

MockWebServer - потрясающая библиотека, но есть одна вещь, которую удивительно сложно сделать: установить ответ по умолчанию.

Чтобы быть точным: я хочу иметь возможность установить ответ, который возвращается, если ответ не был указан с помощью server.enqueue(response).

Я хотел бы иметь возможность сделать что-то вроде:

server.setDefaultResponse(okResponse)
server.enqueue(customResponse)

И затем, когда мои тесты вызывают сервер дважды (или более), каждый ответ после первого будет okResponse.

Когда тесты усложняются и требуются множественные обращения к серверу, иногда указание каждого отдельного ответа (часто просто 200 OK) утомительно и загрязняет тесты.

Есть ли более простой способ сделать это, чем создать собственный Диспетчер ? Правильное его создание (с поддержкой нескольких ответов) звучит как перебор для такой мелочи.

1 Ответ

0 голосов
/ 11 сентября 2018

Существует улучшение, которое можно сделать по сравнению с реализацией Dispatcher. Рассматривая реализацию MockWebServer, я обнаружил, что диспетчер по умолчанию - QueueDispatcher.

И у него есть несколько очень удобных методов, таких как:

public void setFailFast(boolean failFast)

public void setFailFast(MockResponse failFastResponse)

setFailFast(true) переводит сервер в режим быстрого сбоя, т. Е. Если в очереди нет ответа, он не ждет, просто немедленно возвращает ответ HTTP 404.

setFailFast(okResponse) устанавливает ответ на возврат в режиме «fast fast», что точно отвечает на этот вопрос.

Проблема в том, что у вас нет прямого доступа к полю диспетчера в MockWebServer, поэтому вам нужно установить собственный экземпляр QueueDispatcher, а затем установить ответ по умолчанию (или ответ «fast fast») на нем вот так:

val dispatcher = QueueDispatcher()
dispatcher.setFailFast(okResponse)
server.setDispatcher(dispatcher)
...