Unité de test d'un JAX-RS Service Web?
Je suis actuellement à la recherche de façons de créer des tests automatisés pour une JAX-RS (Java API pour les Services Web RESTful) en fonction du service web.
J'ai essentiellement besoin d'un moyen de l'envoyer certains intrants et de vérifier que je reçois les réponses attendues. Je préfère le faire via JUnit, mais je ne suis pas sûr de la façon dont cela peut être réalisé.
Quelle approche avez-vous à tester votre web-services?
Mise à jour: Comme entzik souligné, le découplage du service web à partir de la logique métier me permet de faire le test de l'unité de la logique métier. Cependant, j'ai aussi envie de tester le bon codes d'état HTTP, etc.
- Bonne question - mais je dirais que si vous faites des tests sur HTTP puis il me semble que c'est le test d'intégration.
- Tom. Vous avez absolument raison. Nous devons injecter un mannequin HTTP émulateur/léger conteneur pour cela. Dans node.js monde supertest fait de cette. Vous pouvez émuler express.js.
Vous devez vous connecter pour publier un commentaire.
Jersey est livré avec une grande RESTful API client qui permet d'écrire des tests unitaires vraiment facile. Voir les tests unitaires dans les exemples fournis avec Jersey. Nous utilisons cette approche pour tester le RESTE de support dans Apache Camel, si vous êtes intéressé à la les cas de test sont ici
Vous pouvez essayer Rassurez-vous qui rend très simple de tester des services REST et de la validation de la réponse en Java (à l'aide de JUnit ou TestNG).
Comme Jacques a dit; Il est intégré dans la framework de test pour le Jersey. Un simple exemple hello world peut être comme ceci:
pom.xml pour maven integration. Lorsque vous exécutez
mvn test
. Les cadres de commencer un grizzly conteneur. Vous pouvez utiliser jetty ou tomcat via évolution des dépendances.ExampleApp.java
HelloWorld.java
HelloWorldTest.java
Vous pouvez vérifier cette exemple d'application.
Si c'est trop tard à compter de la date de publication de la question, pensé que cela pourrait être utile pour d'autres personnes qui ont une question similaire.
Jersey est livré avec un framework de test appelé le Maillot Framework De Test qui vous permet de tester votre Service Web RESTful, y compris l'état de la réponse des codes. Vous pouvez l'utiliser pour exécuter vos tests léger conteneurs comme Grizzly, serveur http et/ou EmbeddedGlassFish. Aussi, le cadre pourrait être utilisé pour exécuter vos tests sur les régulièrement un conteneur web comme GlassFish ou Tomcat.
Vous a probablement écrit certains de code java qui implémente la logique d'entreprise et puis vous avez généré le web des services de point de fin pour elle.
Une chose importante à faire est de tester de façon indépendante votre logique métier. Depuis c'est du pur code java, vous pouvez le faire avec régulièrement des tests JUnit.
Maintenant, depuis les services web partie est juste un point final, ce que vous voulez assurez-vous que l'généré plomberie (stubs, etc) sont en synchronisation avec votre code java. vous pouvez le faire par écrit JUnit tests d'invoquer le service web généré des clients java. Cela vous permettra de savoir quand vous changez de java signatures sans mettre à jour les web services de trucs.
Si votre site web des services de plomberie est générée automatiquement par votre système de construction à chaque génération, alors il peut ne pas être nécessaire de tester les points de fin (en supposant que tout est correctement généré). Dépend de votre niveau de paranoïa.
J'utilise Apache HTTPClient (http://hc.apache.org/) pour appeler les Services Restful. Le Client HTTP bibliothèque vous permet d'effectuer facilement get, post ou de toute autre opération dont vous avez besoin. Si votre service utilise JAXB pour la liaison xml, vous pouvez créer un JAXBContext pour sérialiser et désérialiser les entrées et les sorties de la requête HTTP.
Prendre un coup d'oeil à L'alchimie reste générateur client. Cela peut générer un proxy de mise en œuvre de votre JAX-RS classe de service web à l'aide de jersey client derrière la scène. Effectivement, vous vous appeler un webservice méthodes simples méthodes de java à partir de vos tests unitaires. Gère l'authentification http ainsi.
Il n'y a pas de génération de code si vous devez simplement exécuter les tests, donc c'est pratique.
Dislclaimer: je suis l'auteur de cette bibliothèque.
Je n'aurais certainement pas présumer que la personne qui a écrit le JAX-RS code et est à la recherche de l'unité de test de l'interface est d'une certaine manière, pour certains bizarre, inexplicable raison, ignorant la notion qu'il ou elle peut les tests unitaires d'autres parties du programme, y compris les classes de logique métier. Il est à peine utile de le mentionner et le point a été fait à plusieurs reprises que les réponses doivent être testés, trop.
À la fois de Jersey et RESTEasy ont des applications client et, dans le cas de RESTEasy vous pouvez utiliser le même annoations (même facteur annoté de l'interface et l'utilisation sur le côté client et serveur de tests).
RESTE pas ce que ce service peut faire pour vous; RESTE de ce que vous pouvez faire pour ce service.
Garder les choses simples. Jetez un oeil à https://github.com/valid4j/http-matchers qui peuvent être importés à partir de Maven Central.
Exemple d'utilisation:
Que je comprends le but principal de l'auteur de cette question est de découpler JAX RS couche de business one. Et de l'unité de test seulement le premier. Deux problèmes de base ici, nous avons à résoudre:
c'. Et seulement eux.
composants/RESTE de la couche.
La première est résolu avec Arquillian.
Le second est parfaitement décrit dans arquillican et fantaisie
Voici un exemple de code, il peut être différent si vous utilisez un autre serveur d'application, mais j'espère que vous aurez l'idée de base et les avantages.
Un couple de notes:
test diffère un peu. Un autre port peut être utilisé. 8181 est
utilisé par Glassfish Incorporé dans mon exemple.
De l'espoir, ça va aider.