2009-04-30 3 views
8

OK diese Art von bezieht sich auf: Using jetty to install and run servlet tests programmaticallyLaden eine web.xml für Integrationstests mit Anlegesteg bis

bekam große Antworten gibt, und waren in der Lage Servlets programmatisch zu laden und seine alle super gemacht.

Was ich jedoch tun möchte ist, laden Sie eine web.xml in einem Test (alle im Klassenpfad) und führen Sie einen Server (mit dem aktuellen Klassenpfad) - ich habe in der Dokumentation gesehen, wie man es zeigt zu einem Verzeichnis, um das zu tun, aber ich möchte den Klassenpfad abarbeiten (besser für In-Place-Tests). Im Wesentlichen meine web.xml validieren.

(es ist nicht relevant, aber diese App ist in Scala, aber ich hatte kein Problem damit, alles funktioniert wie angekündigt).

+0

Ich sehe dein Problem nicht - was meinst du mit "alle im Klassenpfad"? Wie ich verstehe, möchten Sie einen Jetty mit einer bestimmten web.xml starten. Dies sollte kein Problem sein, kopieren Sie die web.xml mit einem Skript und starten Sie den Jetty. – Mork0075

+0

Eigentlich möchte ich, dass es mit Tests läuft - nicht als separater Prozess starten (was gut funktioniert, aber es ist nicht so sauber wie ein Inprocess-Unit-Test) - es ist nur eine Bequemlichkeit Sache. –

Antwort

13

Es klingt wie das, was Sie tun möchten, lädt eine richtige Webanwendung programmatisch, im Gegensatz zum Laden einzelner Servlets (und ich denke, dass Sie es tun möchten, ohne eine vollständige WAR-Datei zu haben).

Server server = new Server(port); 
WebAppContext root = new WebAppContext(); 

root.setWar("/path/to/somewhere"); 
root.setContextPath("/"); 

server.addHandler(root); 
server.start(); 

Der Trick besteht darin, dass die /path/to/somewhere ein WEB-INF Verzeichnis und Ihre web.xml Datei sollte innerhalb dort leben enthalten sollte. Nichts anderes muss innerhalb dieser Verzeichnisstruktur existieren, da alles andere automatisch aus Ihrem Klassenpfad geladen werden kann (obwohl Sie, wenn Sie das möchten, einen Pfad zu einer tatsächlichen WAR-Datei oder einer explodierten WAR-Struktur erstellen könnten).

+0

ja - das ist, was ich getan habe. und es funktioniert gut. –

+0

(und es ist schnell! Großartig für "Einheit" Tests, die wirklich mehr als Unit Tests sind!) - Vielen Dank für die Aktualisierung dieser Post BTW. –