Das HttpUnitProtocol ist ein Protocol zur Integration der HttpUnit. HttpUnitProtocol ist Bestandteil von Intersult Testing und für die ProtocolFactory geeignet.

Anwendung#

HttpUnitProtocol ist zunächst ein Protocol, das durch einen einfachen Aufruf mit der ProtocolFactory aktiviert wird.

Damit können WAR-Projekte direkt getestet werden, ohne über das TCP/IP-System zu gehen. Es wird eine direkte Stream-Verbindung (java.io) zwischen dem Aufrufer und dem Servlet hergestellt. Die Server-Komponenten können dabei direkt über die web.xml definiert werden, sodass ein WAR-Projekt direkt aufgerufen werden kann.

Das HttpUnitProtocol kann für die Konfiguration von anderen Komponenten wie Abraxas verwendet werden.

Konfiguration#

Das HttpUnitProtocol unterstützt einige Parameter zur Konfiguration:

ParameterBedeutung
webXmlFileDer Pfad an dem sich die web.xml-Datei befindet, Standard ist "src/main/webapp/WEB-INF/web.xml"
contextPathDer Kontext-Pfad der laufenden Web-Anwendung, also http://localhost/<contextPath>/..." Standard ist "/".
translateProtocolStandard 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.

Beispiele#

Echo-Servlet#

	String message = "Hello World!";
	URL url = new URL("unit://localhost/echo");
	HttpUnitConnection connection = (HttpUnitConnection)url.openConnection();
	connection.setDoOutput(true);
	connection.addRequestProperty("Content-Type", "text/plain");
	IOUtils.write(connection.getOutputStream(), message);
	String response = IOUtils.readString(connection.getInputStream());
	Assert.assertEquals(message, response);

Und in der web.xml:

    <servlet>
        <servlet-name>EchoServlet</servlet-name>
        <servlet-class>com.intersult.testing.EchoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    	<servlet-name>EchoServlet</servlet-name>
    	<url-pattern>/echo</url-pattern>
    </servlet-mapping>

Application-Server#

HttpUnit stellt eine leichtgewichtige Implementierung der Servlet-API dar.

Java Server Pages (JSP)#

HttpUnit alle wesentlichen Bestandteile, um JSPs zu verwenden. Dazu sind die folgenden Artifakte hinzuzufügen:
	<dependency>
		<groupId>tomcat</groupId>
		<artifactId>jasper</artifactId>
		<version>3.3.2</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>tomcat</groupId>
		<artifactId>jasper-compiler</artifactId>
		<version>5.5.23</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>tomcat</groupId>
		<artifactId>tomcat-util</artifactId>
		<version>5.5.23</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>tomcat</groupId>
		<artifactId>core_util</artifactId>
		<version>3.3.2</version>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>com.sun</groupId>
		<artifactId>tools</artifactId>
		<version>1.4.2</version>
		<scope>system</scope>
		<systemPath>${java.home}/../lib/tools.jar</systemPath>
	</dependency>

Erklärung: Jasper ist eine Compilier-Einheit für JSPs, die unter anderem in Tomcat verwendet wird. Zusätzlich wird tools.jar aus der bestehenden Java-Installation hinzugefügt, weil Jasper den Java-Compiler nutzt.

HttpUnit und HtmlClient#

HttpUnit ist eine Software zur Simulation eines Servlet-Container. Zusätzlich enthält HttpUnit weitere Teile zur Simulation eines Browsers, die von HttpUnitProtocol nicht verwendet werden. Mit der URLConnection ist die Simulation eines Servlet-Containers abgeschlossen.

Die Simulation eines Browsers kann dann mit einem HtmlClient erfolgen, der systemkonform über die URLConnection geht. Dadurch sind Server- und Client völlig entkoppelt, können daher beliebig simuliert und getestet werden.