Einheit testet ein Java Servlet
Ich würde gerne wissen, was wäre der beste Weg, dies zu tun unit-Tests von einem servlet.
Tests der internen Methoden ist nicht ein problem, solange Sie Sie nicht beziehen sich auf den servlet-Kontext, was aber zum testen der doGet/doPost-Methoden sowie die interne Methode, die sich auf den Kontext oder make-Verwendung von session-Parametern?
Gibt es eine Möglichkeit, dies zu tun, einfach mit klassischen Werkzeugen wie JUnit oder vorzugsweise TestNG? Brauchte ich zum einbetten von einem tomcat-server oder sowas?
InformationsquelleAutor der Frage gizmo | 2008-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen HttpUnitobwohl Sie wahrscheinlich, um am Ende das schreiben von automatisierten tests, die mehr "integration tests" (ein Modul) als 'unit-tests' (der einzelnen Klasse).
InformationsquelleAutor der Antwort Peter Hilton
Meisten der Zeit, die ich zum testen von Servlets und JSP ' s über 'Integrationstests', eher als Reine Unit-Tests. Es gibt eine große Anzahl von add-ons für JUnit/TestNG zur Verfügung, einschließlich:
Dies ist ein JWebUnit-test für eine einfache Auftragsabwicklung Servlet, das die Eingabe verarbeitet, die von der form 'orderEntry.html'. Es erwartet Sie eine Kunden-id, Kundenname und eine oder mehrere Auftragspositionen:
InformationsquelleAutor der Antwort Garth Gilmour
Schaute ich auf die Antworten und dachte, ich würde post, der eine vollständige Lösung, die eigentlich demonstriert, wie Sie die Tests mit embedded GlassFish und seiner Apache-Maven-plugin.
Schrieb ich die komplette Prozess bis Sie auf meinem blog Mit GlassFish 3.1.1 Embedded mit JUnit 4.x und HtmlUnit 2.x und platziert das komplette Projekt zum download auf Bitbucket hier: Bild-servlet
War ich auf der Suche bei einem anderen Beitrag auf ein Bild, servlet zum JSP/JSF-tags, kurz bevor ich Sie sah, diese Frage. So kombinierte ich die Lösung, die ich aus den anderen post mit eine komplette Einheit getestet-version für diesen post.
Wie Test
Apache Maven hat einen wohl definierten Lebenszyklus, umfasst
test
. Ich werde diese zusammen mit einem anderen Lebenszyklus genanntintegration-test
zur Umsetzung meiner Lösung.integration-test
als Teil der Ausführungen der surefire-pluginintegration-test
Lebenszyklus.GlassFish-Plugin
Fügen Sie dieses plugin als Teil des
<build>
.Surefire-Plugin
Hinzufügen/ändern-das plugin als Teil des
<build>
.HTMLUnit
Hinzufügen von integration-tests wie im Beispiel unten.
Schrieb ich die komplette Prozess bis Sie auf meinem blog Mit GlassFish 3.1.1 Embedded mit JUnit 4.x und HtmlUnit 2.x und platziert das komplette Projekt zum download auf Bitbucket hier: Bild-servlet
Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar. Ich denke, dass dies ist ein komplettes Beispiel für Sie, um als Grundlage der Prüfungen, die Sie planen, für servlets.
InformationsquelleAutor der Antwort John Yeary
Rufen Sie die doPost-und doGet-Methoden manuell in die unit-tests? Wenn dem so ist, können Sie überschreiben die HttpServletRequest Methoden, um mock-Objekte.
Den HttpServletRequestWrapper ein convenience-Java-Klasse. Ich schlage vor, Sie erstellen eine utility-Methode in Ihrer unit-tests zu erstellen, die mock-http-Anforderungen:
Ist es sogar besser, die mock-Erstellung von Methoden in einer Basis-servlet Superklasse und machen alle servlets unit-tests zu erweitern.
InformationsquelleAutor der Antwort Marcio Aguiar
Mockrunner (http://mockrunner.sourceforge.net/index.html) können dies tun. Es bietet ein mock-J2EE-container, die verwendet werden können, um test-Servlets. Es kann auch verwendet werden, um unit-test-andere server-side code wie EJBs, JDBC, JMS, Struts. Ich habe nur verwendet die JDBC und EJB-Funktionen selbst.
InformationsquelleAutor der Antwort Kris Pruden
Diese Implementierung eines JUnit-test für die servlet-doPost () - Methode stützt sich nur auf die Mockito-Bibliothek für Spott, Fälle von
HttpRequest
HttpResponse
HttpSession
ServletResponse
undRequestDispatcher
. Ersetzen Sie den parameter-Tasten-und JavaBean-Instanz mit denen, die entsprechen Werte auf die in der zugehörigen JSP-Datei aus, die doPost() aufgerufen wird.Mockito Maven-dependency:
JUnit-test:
InformationsquelleAutor der Antwort Bob Basmaji
Aktualisiert Feb 2018: OpenBrace Limited hat geschlossenund seine ObMimic Produkt wird nicht mehr unterstützt.
Andere Lösung ist die Verwendung meiner ObMimic Bibliothek, die speziell für das unit testen von servlets. Es bietet eine vollständige plain-Java-Implementierungen aller Servlet-API-Klassen, und Sie können konfigurieren, und prüfen Sie diese gegebenenfalls für Ihre tests.
Können Sie in der Tat es verwenden, um den direkten Aufruf von doGet/doPost-Methoden aus JUnit oder TestNG tests und zum testen von internen Methoden, auch wenn Sie sich auf den ServletContext oder verwenden session-Parameter (oder jedes andere Servlet-API-Funktionen).
Dies nicht, benötigen Sie eine externe oder embedded container, nicht begrenzen Sie zu weiteren HTTP-basierte "integration" - tests, und im Gegensatz zu general-purpose-spottet, hat es die vollständige Servlet-API-Verhalten "gebacken", also tests, kann ein "Staat"basiert eher als "Interaktion"-basiert (z.B. die tests müssen nicht verlassen sich auf die genaue Sequenz der Servlet-API-Aufrufe durch deinen code, noch über Ihre eigenen Erwartungen, wie die Servlet-API reagieren auf jeden Anruf).
Gibt es ein einfaches Beispiel in meiner Antwort auf Wie mein test-servlet mit JUnit. Für weitere Informationen und einen kostenlosen download finden Sie in der ObMimic website.
InformationsquelleAutor der Antwort Mike Kaufman