In-process Web Integration Tests with Jetty and JWebUnit

Do you speak test? In that case: Hello web application:


public class WebIntegrationTest extends net.sourceforge.jwebunit.WebTestCase {

    public void testIndex() {
        beginAt("/index.html");
        assertTextPresent("Hello world");
    }

    private org.mortbay.jetty.Server server;

    protected void setUp() throws Exception {
        server = new org.mortbay.jetty.Server(0);
        server.addHandler(
                new org.mortbay.jetty.webapp.WebAppContext("src/main/webapp", "/my-context"));
        server.start();

        int actualPort = server.getConnectors()[0].getLocalPort();
        getTestContext().setBaseUrl("http://localhost:" + actualPort + "/my-context");
    }
}

This code runs with no application server, no separate deployment step, just like that.

If this looks interesting, see my full-sized article on java.net

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 License.

Print This Post Print This Post
  • i guess you are using an IDE which doesn't provide proper XSD validation
  • Thanks for your comment. XSD validation would indeed find some of the defects (like invalid syntax in JSPs), but leave others behind (like the wrong spelling of a bean property name).

    But more importantly: Discovering bugs is just one reasons to write tests. There are others, and more important ones.
  • Kristoffer
    One thing worth mentioning (at least for IntelliJ users) is that if you implement tests like Johannes describes in the blog and put them into a sub-module in a multi-module Maven2 project, you will have to explicitly specify the working directory for that module when running the integration test(s). If not you will get FileNotFoundExceptions followed by HTTP 503s for whatever resource you try to hit afterwards.
  • Kristoffer
    I can't get the example up and running from within my favourite IDE(A) after generating the project files with mvn idea:idea because web.xml is not conformant to the Servlet 2.4 specification.

    Ok, so I know this is a bit childish :) but I guess you've been using some other IDE of which doesn't provide proper XSD validation(?).

    Anyhow, the following fragment (slightly revised) is valid:

    <servlet-mapping>
    <servlet-name>my</servlet-name>
    <url-pattern>/my/*</url-pattern>
    </servlet-mapping>
blog comments powered by Disqus
Creative Commons Attribution 3.0 Unported
This work is licensed under a Creative Commons Attribution 3.0 Unported.