Ich entwickle eine Java 6 EE-Anwendung und teste meinen JSP-Code mit einer anderen mit einer Testversion der Funktionsaufrufe und des Codes, die in der ursprünglichen verwendet wurden, aber es scheint locker und unpraktisch. Gibt es eine gute Möglichkeit, diese Art von Tests durchzuführen?
12
Antworten:
Wenn Sie nicht über MVC (Model View Controller) gelesen haben, tun Sie dies. Sie sollten keinen Code in einer JSP haben, sondern nur anzeigen. Das Einfügen von Code in JSP ist sehr 1900.
Im Ernst, wenn die JSP keinen Code enthält, testen Sie die JSP nicht. Sie testen die Aktion / den Ablauf. Dann könnten Sie HttpUnit oder Selen verwenden . Der große Unterschied besteht darin, dass Selenium mit einem echten Browser getestet wird.
quelle
Ich denke nicht, dass es eine gute Möglichkeit gibt, JSPs zu testen, hauptsächlich weil sie entwickelt wurden, bevor Unit-Tests zu einem Schwerpunkt der Entwicklung wurden.
Robert Martin hat vor einigen Jahren einen Artikel über das Hacken des JSP-Compilers geschrieben, damit Sie Unit-Tests ohne Container durchführen können. Seine Idee war gut, aber sie wurde mit der nächsten Hauptveröffentlichung von TomCat gebrochen. Es ist einfach zu viel Magie los.
Ich bin nicht einverstanden mit der Idee "Fügen Sie einfach keinen Code hinzu und Sie müssen ihn nicht testen". Natürlich sollten Sie keinen Code in die JSP einfügen. Trotzdem verfügt eine komplexe Benutzeroberfläche häufig über eine Anzeigelogik, die rentabel auf Einheitentests getestet werden kann.
Betrachten Sie dieses Beispiel:
Dieser Code ist bereits gut berücksichtigt: Die Logik zur Entscheidung, ob das Admin-Menü angezeigt wird, ist nicht in der Ansicht enthalten. Wenn es jedoch eine einfache Möglichkeit gäbe, JSPs zu testen, könnten wir einen Test schreiben, um zu zeigen, dass das gewünschte Verhalten tatsächlich angezeigt wird, und es würde uns vor einer Änderung der Seite schützen, die das Administratormenü versehentlich sichtbar machte, wenn es nicht sollte nicht sein.
quelle
Es gibt ein Programm (das von jedem von Ihnen verwendeten Anwendungsserver verwendet wird), das eine .jsp-Datei in eine .java-Datei kompiliert. Zum Beispiel die Sonnen- / Orakelversion jspc .
Sobald Sie die .java-Datei haben, die von der .jsp-Übersetzung erzeugt wird (möglicherweise möchten Sie diese sogar als Teil des Erstellungsprozesses verwenden - die jsp-Datei wird beim ersten Treffer vorab kompiliert, um die Leistung zu verbessern), können Sie Tests dagegen ausführen Sie verspotten die Anfrage und überprüfen die Antwort.
(mit Beispiel bearbeiten :)
Die Schlüsselmethode hierfür ist die
_jspService(HttpServletRequest, HttpServletResponse)
Methode.Eine triviale Hallo Welt jsp:
(test.jsp befindet sich in einem Verzeichnis mit dem Namen 'webapp' und auch in einem 'out'-Verzeichnis.) Beim Kompilieren mit dem Befehl
jspc -v -d out -compile -uriroot webapp/ test.jsp
wird eine Datei mit dem Namen' out ' in ein out-Verzeichnis gestellttest_jsp.java
. Diese Datei enthält (zusammen mit einigen anderen Konfigurationskonfigurationen):An diesem Punkt wird überprüft, ob der JspWriter mit Schreiben oder Drucken aufgerufen wird und der Inhalt des Aufrufs so ist, wie Sie es erwarten.
Alles in allem sollte man in einer idealen Welt keine Logik innerhalb des JSP haben - eine solche Logik wäre entweder im Controller oder in Taglibs, die mit anderen Techniken getestet werden.
quelle
Sie können auch ein HTTP-Unit-Test-Framework wie HTTPUnit | verwenden http://httpunit.sourceforge.net/ .
Ein weiterer wichtiger Punkt ist die Trennung der Anliegen Ihrer Bewerbung.
Wenn Sie beispielsweise Techniken wie TDD (http://en.wikipedia.org/wiki/Test-driven_development) verwenden, entwerfen Sie Typen für Testbarkeit.
In JSP verbrauchte Typen werden in bestimmten Komponententests getestet. Wenn dies nicht möglich ist, sollten Sie die Interaktion Benutzer -> Browser simulieren (wieder HTTPUnit oder ähnliches Tool).
quelle
quelle