[TomcatUnitProtocol] ist eine Erweiterung des [ServletUnitProtocol]. [TomcatUnitProtocol] ist Bestandteil des Projekts Tomcat7 Testing, das aus dem [Central Repository|http://search.maven.org/] 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|JSF] 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> }}} __Hinweis:__ Die Web-Root kann man dann unter src/test/webapp aufbauen. Damit befindet man sich [Maven] konform unter src/test und stört keine eventuell vorhandene Web-Root src/main/webapp.