¿Cuál es la mejor manera de simular un servidor para realizar pruebas cuando se usa el marco de actualización cuadrado ?
Formas potenciales:
Cree un nuevo cliente de actualización y configúrelo en RestAdapter.Builder (). SetClient (). Esto implica analizar el objeto Request y devolver el json como un objeto Response.
Implemente esta interfaz anotada como una clase simulada y úsela en lugar de la versión proporcionada por RestAdapter.create () (no probará la serialización gson)
?
Idealmente, quiero que el servidor simulado proporcione respuestas json para poder probar la serialización gson al mismo tiempo.
Cualquier ejemplo sería muy apreciado.
square-oss
? Parece redundante dadoretrofit
.Respuestas:
Solicitudes de prueba de Mock Retrofit 2.0
Como los viejos mecanismos como crear una
MockClient
clase e implementarla desdeClient
ya no funcionan con Retrofit 2.0, aquí describo una nueva forma de hacerlo. Todo lo que necesita hacer ahora es agregar sus interceptores personalizados para OkHttpClient como se muestra a continuación .FakeInterceptor
class simplemente anula elintercept
método y, en el caso de que la aplicación esté enDEBUG
modo, devuelve JSON dado.RestClient.java
IRestService.java
FakeInterceptor.java
Código fuente del proyecto en GitHub
fuente
uri()
debajochain.request().uri()
(lo arregléString url = chain.request().url().toString();
porque mi caso es diferente). 2- Estoy recibiendojava.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once
. He añadido esto enaddNetworkInterceptor()
lugar deaddInterceptor()
.Decidí probar el método 1 de la siguiente manera
Y usándolo por:
¡Funciona bien y le permite probar sus cadenas json sin tener que contactar al servidor real!
fuente
IllegalArgumentException url == null
con Retrofit 1.4.1.builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
Probar la deserialización JSON en sus objetos (presumiblemente con
TypeAdapters
?) Parece un problema separado que requiere pruebas unitarias separadas.Yo uso la versión 2 personalmente. Ofrece código de tipo seguro y fácil de refactorizar que puede depurarse y modificarse fácilmente. Después de todo, ¡de qué sirve declarar su API como interfaces si no está creando versiones alternativas de ellas para probarlas! Polimorfismo para ganar.
Otra opción es usar Java
Proxy
. Así es como Retrofit (actualmente) implementa su interacción HTTP subyacente. Es cierto que esto requerirá más trabajo, pero permitiría simulaciones mucho más dinámicas.fuente
¡También puede usar algo como Webservermock de Squareup! -> https://github.com/square/okhttp/tree/master/mockwebserver
fuente
Soy un gran admirador de Apiary.io para burlarse de una API antes de pasar a un servidor real.
También puede usar archivos .json planos y leerlos desde el sistema de archivos.
También puede utilizar API de acceso público como Twitter, Flickr, etc.
A continuación, se incluyen otros recursos excelentes sobre Retrofit.
Diapositivas: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p
Video: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u
Proyecto de ejemplo: https://github.com/dustin-graham/ucad_twitter_retrofit_sample
fuente
Mockery (descargo de responsabilidad: soy el autor) fue diseñado exactamente para esta tarea.
Mockery es una biblioteca de prueba / simulacro centrada en validar capas de red con soporte incorporado para Retrofit. Autogenera pruebas JUnit basadas en las especificaciones de una API determinada. La idea es no tener que escribir manualmente ninguna prueba; ni implementar interfaces para burlarse de las respuestas del servidor.
fuente
Primero, cree su interfaz Retrofit.
Su Solicitante a continuación:
Si usa la segunda opción (use la interfaz de Retrofit para simular los datos del servidor), necesita MockRetrofit, use el siguiente código:
4.Mis datos son del archivo de activos (Asset / server / EventList.json), el contenido de este archivo es:
5.Si está utilizando el interceptor okhttp3, necesita un interceptor autodefinido, como este:
6.Finalmente, puede solicitar su servidor con código:
Gracias por leer.
fuente
Agregando a la respuesta de @Alec, he extendido el cliente simulado para obtener la respuesta directamente desde un archivo de texto en la carpeta de activos, según la URL de la solicitud.
Ex
Aquí, el cliente simulado entiende que la URL que se está disparando está activada y busca un archivo llamado active.txt en la carpeta de activos. Lee el contenido del archivo assets / active.txt y lo envía como respuesta a la API.
Aquí está el extendido
MockClient
Para obtener una explicación detallada, puede consultar mi blog
http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit-using-custom-clients
fuente
MockClient
archivo, escribí una clase de prueba usando robolectric. Pero no puedo obtener ninguna respuesta del archivo json.JSONPlaceholder: API REST en línea falsa para pruebas y creación de prototipos
https://jsonplaceholder.typicode.com/
ReqresIn: otra API REST en línea
https://reqres.in/
Servidor simulado de cartero
Si desea probar la carga útil de respuesta personalizada, es posible que los dos anteriores no se ajusten a sus requisitos, entonces puede probar el servidor simulado de cartero. Es bastante fácil de configurar y flexible para definir su propia carga útil de solicitud y respuesta.
https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE
fuente
Simular llamadas de API con Retrofit ahora es aún más fácil con Mockinizer, que hace que trabajar con MockWebServer sea realmente sencillo:
Simplemente cree un mapa de RequestFilter y MockResponses y luego conéctelo a su cadena de construcción OkHttpClient:
No tiene que preocuparse por configurar MockWebServer, etc. Simplemente agregue sus simulacros, el resto lo hace Mockinizer por usted.
(Descargo de responsabilidad: soy el autor de Mockinizer)
fuente
Para mí, el cliente de reacondicionamiento personalizado es excelente debido a su flexibilidad. Especialmente cuando usa cualquier marco DI, puede activar / desactivar simulacros de forma rápida y sencilla. Estoy usando un cliente personalizado proporcionado por Dagger también en pruebas unitarias y de integración.
Editar: Aquí puede encontrar un ejemplo de modificación burlona https://github.com/pawelByszewski/retrofitmock
fuente