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.
- Android: subir imagen a Twitter utilizando REST API y Fabric, error de tubería roto
- Default Schedulers para rxjava en Android
- Deserializador de Gson con el convertidor de Retrofit: solo necesita JSON interno para todas las respuestas
- Cómo obtener una respuesta genérica de Retrofit 2
- RxJava se vuelve a suscribir al evento tras la restauración de la actividad
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
- POST cuerpo JSON utilizando Retrofit
- AbstractMethodError cuando se utiliza RxJavaCallAdapterFactory en Retrofit 2
- ¿Cómo puede Retrofit 2.0 analizar objeto JSON anidado?
- Cómo crear un objeto retrofit.Response durante las pruebas de unidad con Retrofit 2
- No se puede analizar el error en Retrofit 2
- Cómo ignorar un elemento JSON en Android Retrofit
- Android: Realm + Retrofit - Serializar apiresponse
- Descargar vídeo de Url con Retrofit
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.