Quelle est la meilleure façon de simuler un serveur à des fins de test lors de l'utilisation du framework Square Retrofit .
Moyens potentiels:
Créez un nouveau client de retrofit et définissez-le dans RestAdapter.Builder (). SetClient (). Cela implique l'analyse de l'objet Request et le retour du json en tant qu'objet Response.
Implémentez cette interface annotée en tant que classe fictive et utilisez-la à la place de la version fournie par RestAdapter.create () (ne testera pas la sérialisation gson)
?
Idéalement, je veux que le serveur fictif fournisse des réponses json afin que je puisse tester la sérialisation gson en même temps.
Tous les exemples seraient grandement appréciés.
square-oss
? Cela semble redondant donnéretrofit
.Réponses:
Demandes de test Mock Retrofit 2.0
Comme les anciens mécanismes comme la création de
MockClient
classe et son implémentation à partir deClient
ne fonctionnent plus avec Retrofit 2.0, je décris ici une nouvelle façon de faire cela. Tout ce que vous devez faire maintenant est d' ajouter vos intercepteurs personnalisés pour OkHttpClient comme indiqué ci-dessous .FakeInterceptor
class remplace simplement laintercept
méthode et dans le cas où l'application est enDEBUG
mode, retourne le JSON.RestClient.java
IRestService.java
FakeInterceptor.java
Code source du projet sur GitHub
la source
uri()
souschain.request().uri()
(j'ai corrigé cela parString url = chain.request().url().toString();
mon cas différent). 2- Je reçoisjava.lang.IllegalStateException: network interceptor my.package.name.FakeInterceptor must call proceed() exactly once
. J'ai ajouté ceci àaddNetworkInterceptor()
plutôt queaddInterceptor()
.J'ai décidé d'essayer la méthode 1 comme suit
Et en l'utilisant par:
Cela fonctionne bien et vous permet de tester vos chaînes json sans avoir à contacter le vrai serveur!
la source
IllegalArgumentException url == null
avec Retrofit 1.4.1.builder.setEndpoint("http://mockserver.com").setClient(new MockClient());
Tester la désérialisation JSON sur vos objets (probablement avec
TypeAdapters
?) Semble être un problème distinct qui nécessite des tests unitaires séparés.J'utilise personnellement la version 2. Il offre un code de type sécurisé, convivial pour le refactor, qui peut être facilement débogué et modifié. Après tout, à quoi bon déclarer votre API en tant qu'interfaces si vous n'en créez pas d'autres versions pour les tester! Polymorphisme pour la victoire.
Une autre option consiste à utiliser un Java
Proxy
. C'est en fait ainsi que Retrofit implémente (actuellement) son interaction HTTP sous-jacente. Cela nécessitera certes plus de travail, mais permettrait des simulations beaucoup plus dynamiques.la source
Vous pouvez également utiliser quelque chose comme Webservermock de Squareup! -> https://github.com/square/okhttp/tree/master/mockwebserver
la source
Je suis un grand fan d' Apiary.io pour se moquer d'une API avant de passer à un vrai serveur.
Vous pouvez également utiliser des fichiers .json plats et les lire à partir du système de fichiers.
Vous pouvez également utiliser des API accessibles au public comme Twitter, Flickr, etc.
Voici quelques autres excellentes ressources sur la modernisation.
Diapositives: https://docs.google.com/presentation/d/12Eb8OPI0PDisCjWne9-0qlXvp_-R4HmqVCjigOIgwfY/edit#slide=id.p
Vidéo: http://www.youtube.com/watch?v=UtM06W51pPw&feature=g-user-u
Exemple de projet: https://github.com/dustin-graham/ucad_twitter_retrofit_sample
la source
La moquerie (avertissement: je suis l'auteur) a été conçue précisément pour cette tâche.
Mockery est une bibliothèque de simulation / test axée sur la validation des couches réseau avec prise en charge intégrée de la modernisation. Il génère automatiquement des tests JUnit basés sur les spécifications d'une API donnée. L'idée est de ne pas avoir à écrire manuellement de test; ni mettre en œuvre des interfaces pour se moquer des réponses du serveur.
la source
Commencez par créer votre interface Retrofit.
Votre demandeur à suivre:
Si vous utilisez le deuxième choix (utilisez l'interface Retrofit pour les données du serveur Mock), vous devez MockRetrofit, utilisez le code suivant:
4.Mes données proviennent du fichier d'actif (Asset / serveur / EventList.json), ce contenu de fichier est:
5.Si vous utilisez l'intercepteur okhttp3, vous devez utiliser l'intercepteur auto-défini, comme ceci:
6.Enfin, vous pouvez demander à votre serveur avec le code:
Merci d'avoir lu.
la source
En ajoutant à la réponse de @Alec, j'ai étendu le client fictif pour obtenir la réponse directement à partir d'un fichier texte dans le dossier d'actifs en fonction de l'URL de la demande.
Ex
Ici, le client fictif comprend que l'URL déclenchée est activée et recherche un fichier nommé activate.txt dans le dossier assets. Il lit le contenu du fichier assets / activate.txt et l'envoie en réponse à l'API.
Voici le prolongé
MockClient
Pour une explication détaillée, vous pouvez consulter mon blog
http://www.cumulations.com/blogs/13/Mock-API-response-in-Retrofit-using-custom-clients
la source
MockClient
fichier, écrit une classe de test en utilisant robolectric. Mais je ne peux pas obtenir de réponse du fichier json.JSONPlaceholder: Fake Online REST API for Testing and Prototyping
https://jsonplaceholder.typicode.com/
ReqresIn: une autre API REST en ligne
https://reqres.in/
Serveur factice de facteur
Si vous souhaitez tester la charge utile de réponse personnalisée, les deux ci-dessus peuvent ne pas répondre à vos besoins, alors vous pouvez essayer le serveur factice postman. Il est assez facile à configurer et flexible pour définir votre propre charge utile de demande et de réponse.
https://learning.getpostman.com/docs/postman/mock_servers/intro_to_mock_servers/ https://youtu.be/shYn3Ys3ygE
la source
La simulation d'appels d'API avec Retrofit est désormais encore plus facile avec Mockinizer, ce qui rend le travail avec MockWebServer vraiment simple:
Créez simplement une carte de RequestFilter et MockResponses , puis branchez-la dans votre chaîne de générateur OkHttpClient:
Vous n'avez pas à vous soucier de la configuration de MockWebServer, etc. Ajoutez simplement vos simulacres, tout le reste est fait par Mockinizer pour vous.
(Avertissement: je suis l'auteur de Mockinizer)
la source
Pour moi, le client de rénovation personnalisé est excellent en raison de sa flexibilité. Surtout lorsque vous utilisez n'importe quel framework DI, vous pouvez activer / désactiver rapidement et simplement des simulations. J'utilise le client personnalisé fourni par Dagger également dans les tests unitaires et d'intégration.
Edit: Ici vous trouvez un exemple de mise à niveau moqueuse https://github.com/pawelByszewski/retrofitmock
la source