Les tests unitaires Java Servlet
Je voudrais savoir quel serait le meilleur moyen de faire des tests unitaires d'une servlet.
Tests méthodes internes n'est pas un problème tant qu'ils ne se réfèrent pas à la servlet contexte, mais ce que sur l'évaluation de la doGet/doPost méthodes comme la méthode interne qui se référer au contexte ou de faire usage de paramètres de session?
Est-il un moyen de le faire simplement à l'aide des outils classiques tels que JUnit, ou de préférence TestNG? Ai-je besoin pour intégrer un serveur tomcat ou quelque chose comme ça?
- double possible de tests Unitaires servlets
Vous devez vous connecter pour publier un commentaire.
Essayer HttpUnit, bien que vous êtes susceptibles de finir par écrire des tests automatisés qui ne sont plus "les tests d'intégration" (d'un module) que "tests unitaires" (d'une seule classe).
La plupart du temps je test les Servlets et les JSP via 'les Tests d'Intégration" plutôt que de pur Tests Unitaires. Il existe un grand nombre d'add-ons pour JUnit/TestNG disponibles, y compris:
C'est un JWebUnit test pour un simple Traitement de la Commande Servlet, qui traite l'entrée de la forme 'orderEntry.html'. Il s'attend à un id de client, le nom d'un client et d'un ou plusieurs articles d'une commande:
J'ai regardé les réponses et pensé que je voudrais poster une solution plus complète que la réalité montre comment faire le test à l'aide d'embedded GlassFish et sa Apache Maven plugin.
J'ai écrit le processus complet sur mon blog À l'aide de GlassFish 3.1.1 Intégré avec JUnit 4.x et interface htmlunit 2.x et placé le projet complet à télécharger sur Bitbucket ici: image-servlet
J'était à la recherche d'un autre poste sur une image servlet JSP/JSF balises juste avant j'ai vu cette question. Donc, j'ai combiné la solution que j'ai utilisé de l'autre post avec une unité complète en version testée pour ce poste.
Comment Tester
Apache Maven a un cycle de vie qui comprend
test
. Je vais l'utiliser avec un autre cycle de vie appeléintegration-test
pour mettre en œuvre ma solution.integration-test
dans le cadre de l'exécution de la surefire-pluginintegration-test
cycle de vie.GlassFish Plugin
Ajouter ce plugin dans le cadre de la
<build>
.Plugin Surefire
Ajouter/modifier le plugin dans le cadre de la
<build>
.Interface htmlunit
Ajouter des tests d'intégration, comme l'exemple ci-dessous.
J'ai écrit le processus complet sur mon blog À l'aide de GlassFish 3.1.1 Intégré avec JUnit 4.x et interface htmlunit 2.x et placé le projet complet à télécharger sur Bitbucket ici: image-servlet
Si vous avez des questions, veuillez laisser un commentaire. Je pense que c'est un exemple complet pour vous d'utiliser comme base de toute analyse, vous êtes planification pour les servlets.
Êtes-vous de l'appel de la doPost et méthodes doGet manuellement dans les tests unitaires? Si oui, vous pouvez remplacer le HttpServletRequest méthodes pour fournir les objets fantaisie.
La HttpServletRequestWrapper est un confort de classe Java. Je vous suggère de créer une méthode utilitaire dans vos tests unitaires pour créer la maquette de requêtes http:
C'est encore mieux de mettre de la fantaisie des méthodes de création dans une base de servlet super-classe et de faire toutes les servlets de tests unitaires pour le prolonger.
Mockrunner (http://mockrunner.sourceforge.net/index.html) peuvent le faire. Il fournit un simulacre de conteneur J2EE qui peut être utilisé pour tester des Servlets. Il peut également être utilisé pour l'unité de test de code côté serveur comme les Ejb, JDBC, JMS, Struts. J'ai seulement utilisé le JDBC et EJB capacités de moi-même.
Cette mise en œuvre d'un test JUnit pour servlet doPost() la méthode repose uniquement sur le Mockito bibliothèque de moquerie en place des instances de
HttpRequest
,HttpResponse
,HttpSession
,ServletResponse
etRequestDispatcher
. Paramètre remplacer les clés et JavaBean exemple avec ceux qui correspondent aux valeurs rapportées dans la associée fichier JSP à partir de laquelle doPost() est appelée.Mockito Maven dependency:
De test JUnit:
verify(session).setAttribute("field", "value")
est peut-être aussi une bonne affirmation.Mise à jour de Février 2018: OpenBrace Limitée a fermé, et son ObMimic produit n'est plus supporté.
Une autre solution est d'utiliser mon ObMimic de la bibliothèque, qui est spécifiquement conçu pour les tests unitaires de servlets. Elle offre complète de la plaine-implémentations Java de toutes les classes de l'API Servlet, et vous pouvez les configurer et de les inspecter ces que nécessaire pour vos tests.
En effet, vous pouvez l'utiliser pour appeler directement doGet/doPost méthodes de JUnit ou TestNG tests, et de tester les méthodes internes, même si elles se réfèrent à la ServletContext ou utiliser les paramètres de session (ou toutes les autres fonctionnalités de l'API Servlet).
Cela n'a pas besoin d'une source externe ou conteneur embarqué, ne vous limite pas à un plus large HTTP basée sur "l'intégration" des tests, et contrairement à l'usage général se moque d'elle a la pleine Servlet API de comportement de "cuit", vos tests peuvent être "état"plutôt que "interaction"-base (par exemple, vos tests n'ont pas à compter sur le déroulement précis de la Servlet API appels effectués par votre code, ni sur vos propres attentes de la façon dont la Servlet API permettra de répondre à chaque appel).
Il y a un exemple simple dans ma réponse à Comment faire pour tester mon servlet utilisant JUnit. Pour plus de détails et téléchargement gratuit voir le ObMimic site web.