TomcatUnitProtocol
This is version . It is not the current version, and thus it cannot be edited.
Back to current version   Restore this version

TomcatUnitProtocol ist eine Erweiterung des ServletUnitProtocol. TomcatUnitProtocol ist Bestandteil des Projekts Tomcat7 Testing, das aus dem Central Repository unter der Artifact-Id testing-tomcat7 bezogen werden kann.

Hintergrund#

Mit dem ServletUnitProtocol können keine JSPs verwendet werden, daher wurde das TomcatUnitProtocol geschaffen. Im Wesentlichen bringt es die dazu notwendigen Abhängigkeiten mit und registriert diese im Servlet-Container.

Beispiel#

Systemweites Registrieren#

Durch folgenden Aufruf wird das TomcatUnitProtocol für alle URLs unter dem Protokoll "unit" verwendbar:
	TomcatUnitProtocol protocol = new TomcatUnitProtocol();
	ProtocolFactory.register(protocol);

Es kann als unit://localhost/test.jsp verwendet werden.

Lokale Verwendung#

Das TomcatUnitProtocol kann auch lokal, beim Konstruieren eines URLs eingesetzt werden:
	TomcatUnitProtocol protocol = new TomcatUnitProtocol();
	URL url = new URL(null, "unit://localhost/test.jsp", protocol);
	HttpURLConnection connection = (HttpURLConnection)url.openConnection();
	int responseCode = connection.getResponseCode();
	if (responseCode != 200)
		connection.getInputStream(); // throw
	String string = IOUtils.readString(connection.getInputStream());

Testen von JSF-Projekten#

Mit der Tomcat-Unit können auch JSF-Projekte getestet werden. In einem JUnit-Test kann der HtmlClient verwendet werden, um einen JSF-Container zu erzeugen:
public class JsfTest {
	@Test
	public void test() throws Exception {
		HtmlClient client = new HtmlClient();
		Page page = client.begin(new MutableURL("unit://localhost/faces/index.xhtml", getProtocol()), null, false);
		Assert.assertNotNull(page);
		Element head = page.getElement("//H1");
		Assert.assertNotNull(head);
		Assert.assertEquals("Hello World!", head.getText());
	}

	private ServletUnitProtocol getProtocol() {
		ServletUnitProtocol protocol = new TomcatUnitProtocol();
		protocol.setWebXmlFile("src/test/webapp/WEB-INF/web.xml");
		return protocol;
	}
}

Damit JSF hochgefahren werden kann, ist JSF Workspace erforderlich. JSF Workspace ermöglicht, dass JSF-Komponenten im Workspace gefunden werden. Standardmäßig findet JSF nur Komponenten in JAR-Dateien.

Handelt es sich bei dem Projekt um ein Maven-Setup, können die POM-Dependencies etwa so aussehen:

		<!-- Test scope -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.intersult</groupId>
			<artifactId>html</artifactId>
			<version>1.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.intersult</groupId>
			<artifactId>testing-tomcat7</artifactId>
			<version>1.0</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.intersult</groupId>
			<artifactId>jsf-workspace</artifactId>
			<version>1.1</version>
			<scope>test</scope>
		</dependency>