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.
- Retrofit: ¿Cómo enviar una solicitud POST con campos constantes?
- Renovación de la referencia $ ref de objeto deserializante de JSON a su copia original
- Android: Realm + Retrofit - Serializar apiresponse
- Retrofit ETAG y almacenamiento en caché
- Default Schedulers para rxjava en Android
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
- RxJava alternativa para el operador map () para guardar los elementos emitidos
- ¿Cómo estructurar mi aplicación usando MVP con rxjava y retrofit para obtener datos de Observables?
- Encadenamiento de dos llamadas de servicio web mediante RxJava y Retrofit
- ¿Cómo usar Retrofit y SimpleXML juntos para descargar y analizar un archivo XML de un sitio?
- Obtener TypeNotPresentException seguido de ClassNotFoundException o NoClassDefFoundError en todas las versiones de android excepto android L
- ¿Cómo puedo utilizar Retrofit para POST un complejo JSON parámetro
- Obtener objeto JSON anidado con GSON utilizando retrofit
- Configuración de Android studio 1.1.0 minifyEnabled true causando problemas con la aplicación
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 acalculateIsFailure()
que devuelventrue
.
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.