Не моделируйте сеть с помощью Retrofit и MockWebServer

Я хочу симулировать отсутствие сетевого случая при использовании RetroFit и MockWebServer .

Im в настоящее время тестирует с помощью Espresso и MockWebServer URL-адрес RestAdapter в RestAdapter до начала моих тестов. Это отлично подходит для насмешливых ответов сервера и т. Д., Но я не вижу простой способ сценария исключения java.net.ConnectException при отсутствии сети. Я вижу, что MockResponse позволяет моделировать дросселирование и т. Д., Но не обычное исключение.

Я знаю, что я мог бы исправить насмешку над фактическим интерфейсом веб-api, который использовался для retrofit но я хотел бы использовать тот же подход, что и другие мои тесты, если это возможно, используя MockWebServer .

Полагаю, я просто пропустил что-то простое 🙂

благодаря

Solutions Collecting From Web of "Не моделируйте сеть с помощью Retrofit и MockWebServer"

Retrofit имеет retrofit-mock модуль, который предлагает класс MockRestAdapter , целью которого является имитация задержек сети и ошибок.

Это используется вместе с обычным RestAdapter для создания экземпляра вашей службы. Вы можете увидеть полный пример в samples/mock-github-client/ folder репо: https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-client

MockRestAdapter предлагает следующие API:

  • setDelay – установить задержку в оба конца сети в миллисекундах.
  • setVariancePercentage – установить процент плюс-минус отклонения от задержки в поездке в оба конца.
  • setErrorPercentage – установить процент вызовов для calculateIsFailure() которые возвращают true .

В своем тесте вы можете вызвать setErrorPercentage(100) чтобы гарантировать, что произойдет сетевая ошибка. По умолчанию время для ошибки, которую нужно выбросить, составляет от 0 до 3 раз задержка. Установите задержку на 0 для мгновенных результатов.

Чтобы быть ясными с типами исключений здесь, вы можете увидеть различия:

Ошибка подключения к Интернету

Таким образом, вы можете получить два типа:

UnknownHostException – Если у вас нет интернета или неизвестного хоста … чтобы имитировать это, установите для адаптера неправильную конечную точку.

ConnectException – mockwebserver может вызывать исключение тайм-аута. Вы можете увидеть, как это сделать здесь:

https://github.com/square/okhttp/tree/master/mockwebserver

На самом деле я не знаю, как ваш код, но я надеюсь, что это полезно

Я не знаю, полезно ли это, но вы можете имитировать тайм-аут с помощью MockWebServer:

 String contentType = "Content-type: application/json"; MockResponse response = MockResponse().setResponseCode(statusCode).setBody(responseBody).addHeader(contentType); MockWebServer proxy = new MockWebServer(); proxy.enqueue(response); proxy.setBodyDelayTimeMs(timeoutDelay)); proxy.play(10000); //Number port - Important!!! 

Примечание. Пожалуйста, установите HttpClient вашего кода (например, AsyncHttpClient) с этим номером порта для целей тестирования.