No simule ninguna red con Retrofit y MockWebServer

Quiero simular el caso de la red no cuando se utiliza RetroFit y MockWebServer .

Actualmente estoy probando usando Espresso y suministrando la url de RestAdapter al RestAdapter antes de comenzar mis pruebas. Esto funciona muy bien para burlarse de las respuestas del servidor y así sucesivamente, pero no puedo ver una forma sencilla de script de la excepción java.net.ConnectException lanzada cuando un dispositivo no tiene red. Puedo ver el MockResponse permite la regulación de la simulación y así sucesivamente, pero no una excepción personalizada.

Sé que podría ir a la raíz de burlarse de la interfaz de web api real utilizada por retrofit pero me gustaría usar el mismo enfoque que mis otras pruebas, si es posible mediante el uso de MockWebServer .

Me imagino que he perdido algo sencillo 🙂

Gracias

Retrofit tiene un módulo retrofit-mock que ofrece una clase MockRestAdapter cuyo propósito es simular retardo de red y errores.

Esto se utiliza en conjunto con el RestAdapter normal para crear una instancia de su servicio. Puede ver un ejemplo completo en la carpeta samples/mock-github-client/ folder del repo: https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-client

MockRestAdapter ofrece estas API:

  • setDelay – Establece el retardo de redondeo de red, en milisegundos.
  • setVariancePercentage – Establece el porcentaje de desviación más o menos del retardo de ida y vuelta de la red.
  • setErrorPercentage – Establece el porcentaje de llamadas a calculateIsFailure() que devuelven true .

En su prueba, puede llamar a setErrorPercentage(100) para garantizar que se produzca un error de red. Por defecto la cantidad de tiempo para que el error sea lanzado es de 0 a 3 veces el retardo. Ajuste el retardo a 0 para resultados instantáneos.

Para ser claro con los tipos de excepciones aquí se puede ver las diferencias:

Error de conexión a Internet

Así que usted puede obtener dos tipos:

UnknownHostException – Cuando no tiene Internet o un host desconocido … para simular esto, configure en el adaptador un punto final incorrecto.

ConnectException – mockwebserver puede lanzar una excepción de tiempo de espera. Puedes ver cómo hacerlo aquí:

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

Realmente no sé cómo es tu código, pero espero que esto sea útil

No sé si es útil, pero puede simular un tiempo de espera con 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!!! 

Nota: Por favor, establezca HttpClient de su código (por ejemplo, AsyncHttpClient) con ese puerto de número para fines de prueba.

  • NoSuchMethodError si estoy usando okhttp 2.0 y la última actualización?
  • Cubriendo json array utilizando retrofit?
  • Android - Configuración de Retrofit / Apache HttpClient para Digest Auth
  • Adaptar la matriz de objetos a GSON Error
  • Manejo de listas con RxJava y Retrofit en android
  • Android rxJava Manejo de errores con retroadaptación
  • Retrofit 2.x: Cabecera de registro para la solicitud y la respuesta
  • Retrofit, devolución de llamada para 204 No respuesta de contenido?
  • Problema con Retrofit y simple - intento de hacer un lector de RSS para Android
  • Cambiar ConnectionTimeout de Retrofit OkHttpClient en tiempo de ejecución
  • ¿Cómo pasar el enum personalizado en @Query a través de Retrofit?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.