This page (revision-21) was last changed on 26-Jun-2012 13:47 by Dieter Käppel

This page was created on 27-Apr-2012 07:09 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
21 26-Jun-2012 13:47 5 KB Dieter Käppel to previous

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
Das [ServletUnitProtocol] ist ein Protocol zum direkten Aufruf von Web-Applikationen. [ServletUnitProtocol] ist Bestandteil von [Intersult Testing] und für die [ProtocolFactory] geeignet. Falls eine Browser-Simulation eingesetzt werden soll, kann [HtmlClient] verwendet werden.
Das [UnitProtocol] ist ein Protocol für die [ProtocolFactory] für die Integration der [HttpUnit|http://en.wikipedia.org/wiki/HttpUnit]. [UnitProtocol] ist ein Bestandteil von [Intersult Testing].
At line 4 changed one line
[ServletUnitProtocol] ist zunächst ein Protocol, das durch einen einfachen Aufruf mit der [ProtocolFactory] aktiviert wird.
[UnitProtocol] ist zunächst ein Protocol, das durch einen einfachen Aufruf mit der [ProtocolFactory] aktiviert wird.
At line 8 changed one line
Das [ServletUnitProtocol] kann für die Konfiguration von anderen Komponenten verwendet werden, wie zum Beispiel [Abraxas].
Das [UnitProtocol] kann für die Konfiguration von anderen Komponenten wie [Abraxas] verwendet werden.
At line 10 removed 8 lines
!!!Konfiguration
Das [ServletUnitProtocol] unterstützt einige Parameter zur Konfiguration:
||Parameter||Bedeutung
|webXmlFile|Der Pfad an dem sich die web.xml-Datei befindet, Standard ist "src/main/webapp/WEB-INF/web.xml". Bei einer gefilterten Web-Application (Variablenersetzung), kann auch target/<finalname>/WEB-INF/web.xml verwendet werden.
|contextPath|Der Kontext-Pfad der laufenden Web-Anwendung, also http://localhost/<contextPath>/..." Standard ist "/".
|translateProtocol|Standard ist, dass die Web-Anwendung im Aufruf-URL als Protocol einen URL mit "unit://localhost/..." übergeben bekommt. Meist ist dies nützlich, da die Links auf Web-Seiten so auch wieder auf das Protocol verweisen. Einige Anwendungen können damit Probleme haben, daher kann dieses Verhalten durch den Wert false abgeschaltet werden. In diesem Fall wird die URL zu "http://localhost/..." übersetzt.
At line 23 changed one line
ServletUnitConnection connection = (ServletUnitConnection)url.openConnection();
HttpUnitConnection connection = (HttpUnitConnection)url.openConnection();
At line 25 changed one line
connection.addRequestProperty("Content-Type", "text/plain");
connection.addRequestProperty("Content-Type", "text/xml");
At line 43 removed 54 lines
!Integrations-Test
Das [ServletUnitProtocol] kann auch als Integrationstest eingesetzt werden, also nicht auf dem Quellverzeichnis /src/main/webapp/ sondern unter /target/<name>/. Dies ist sinnvoll, wenn Ressourcen gefiltert oder generiert werden.
Zunächst wird das Output-Directory in das Build-Verzeichnis gelegt, sodass das exploded WAR-Verzeichnis komplett ist:
{{{
<build>
<finalName>name</finalName>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
...
</build>
}}}
Der Test kann dann so aussehen:
{{{
public class ITCheck {
@BeforeClass
public static void beforeClass() {
ServletUnitProtocol protocol = new ServletUnitProtocol("/name");
protocol.setWebXmlFile("target/name/WEB-INF/web.xml");
ProtocolFactory.register(protocol);
}
@Test
public void test() throws Exception {
HtmlClient client = new HtmlClient(new UrlClient());
URL url = new URL("unit://localhost/");
Page page = client.begin(url, null, false);
Element error = page.getElement("/HTML/BODY/H2[1]");
Assert.assertNull(error);
}
}
}}}
__Erklärung:__ Die statische Methode beforeClass registriert das [ServletUnitProtocol]. Die Methode test erzeugt einen neuen HtmlClient, der einen GET-Request auf die URL unit://localhost/ absetzt. Die erzeugte HTML-Seite wird geparsed und als Page-Objekt zurückgegeben. Danach wird getestet, dass sich auf der Seite kein Element mit dem Xpath "/HTML/BODY/H2[1]" befindet.
!!!Application-Server
Der ServletContainer stellt eine leichtgewichtige Implementierung der Servlet-API dar. Die Implementierung umfasst Servlets, Servlet-Filter, Sessions und weitere Teile. Daher können die meisten Anwendungen getestet werden, die auf einer web.xml basieren (als WAR gepackt werden).
!!!Java Server Pages (JSP)
Wenn dazu JSPs verwendet werden sollen, kann das [TomcatUnitProtocol] verwendet werden. Es ist eine Erweiterung des [ServletUnitProtocol], das alle Abhängigkeiten mitbringt um die Einheit zum Compilieren der JSPs zu registrieren.
!HtmlClient
[ServletUnitProtocol] simuliert einen Servlet-Container, die hinter einer HttpURLConnection gekapselt ist.
Die Simulation eines Browsers kann dann mit der von [ServletUnitProtocol] unabhängigen Software [HtmlClient] erfolgen, da diese systemkonform über die URLConnection geht. Dadurch sind Server- und Client entkoppelt, können daher beliebig simuliert, getestet und ausgetauscht werden.
!!!Fragen & Antworten (Q&A)
!InstanceManager
__Frage:__ Die Fehlermeldung: 500 org.apache.jasper.JasperException: java.lang.IllegalStateException: No org.apache.tomcat.InstanceManager set in ServletContext
__Antwort:__ Es wurde versucht JSPs zu rendern, das kann mit [TomcatUnitProtocol] durchgeführt werden.