android - No simule ninguna red utilizando Retrofit y MockWebServer
(3)
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 propósitos de prueba.
Quiero simular el caso de no red cuando uso 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 simular respuestas del servidor y así sucesivamente, pero no puedo ver una forma sencilla de escribir la excepción java.net.ConnectException
cuando un dispositivo no tiene red. Puedo ver que MockResponse permite la simulación de regulación y demás, pero no es una excepción personalizada.
Sé que podría ir a la raíz de la burla de la interfaz de api web real utilizada por la retrofit
pero me gustaría utilizar el mismo enfoque que mis otras pruebas, si es posible, utilizando MockWebServer
.
Me imagino que me he perdido algo simple :)
Gracias
Para ser claros con los tipos de excepciones aquí, puede ver las diferencias:
Así que puedes obtener dos tipos:
UnknownHostException : cuando no tiene internet o un host desconocido ... para simular esto, establezca 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 sea útil
Retrofit tiene un módulo de retrofit-mock
MockRestAdapter
que ofrece una clase MockRestAdapter
cuyo propósito es simular el retraso y los errores de la red.
Esto se usa junto con el RestAdapter
normal para crear una instancia de su servicio. Puede ver un ejemplo completo en la carpeta samples/mock-github-client/
del repositorio: https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-client
MockRestAdapter
ofrece estas APIs:
-
setDelay
: establece el retardo de ida y vuelta de la red, en milisegundos. -
setVariancePercentage
: establece el porcentaje de variación más o menos del retardo de ida y vuelta de la red. -
setErrorPercentage
: establece el porcentaje de llamadas asetErrorPercentage
calculateIsFailure()
que devuelventrue
.
En su prueba, puede llamar a setErrorPercentage(100)
para garantizar que se producirá un error de red. Por defecto, la cantidad de tiempo para que se produzca el error es de 0 a 3 veces el retraso. Establezca el retraso en 0 para obtener resultados instantáneos.