天天看點

使用Cactus+Jetty進行servelt的單元測試

  待測試的servlet:

package junitbook.container;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpsession;

public class sampleservlet extends httpservlet

{

    public boolean isauthenticated(httpservletrequest request)

    {

        httpsession session = request.getsession(false);

        if (session == null)

        {

            return false;

        }

        string authenticationattribute =

            (string) session.getattribute("authenticated");

        return boolean.valueof(

            authenticationattribute).booleanvalue();

    }

}

  測試類:

import org.apache.cactus.servlettestcase;

import org.apache.cactus.webrequest;

public class testsampleservletintegration extends servlettestcase

    private sampleservlet servlet;   

    public static test suite()

        testsuite suite = new testsuite("all tests with jetty");

        suite.addtestsuite(testsampleservletintegration.class);

        return new jetty5xtestsetup(suite);

    protected void setup()

        servlet = new sampleservlet();

    public void testisauthenticatedauthenticated()

        session.setattribute("authenticated", "true");

        asserttrue(servlet.isauthenticated(request));

    public void testisauthenticatednotauthenticated()

        assertfalse(servlet.isauthenticated(request));

    public void beginisauthenticatednosession(webrequest request)

        request.setautomaticsession(false);

    public void testisauthenticatednosession()

  有幾點要說明:

  1.測試類要繼承servlettestcase,内置了session,request,response,可直接用

  2.jetty不要用單獨下載下傳的版本,每個cactus發行版都内置了一個jetty,在lib目錄下可以找到,顯然是改寫過的,如果你用單獨下載下傳的,一定會抛出java.lang.nosuchmethodexception: org.mortbay.jetty.nio.selectchannelconnector.setport(java.lang.string),因為在單獨的jetty發行版中,setport用的參數是int,是以會抛異常,不知cactus為什麼要這樣搞。

  3.還要依賴commons codec這個jar

  4.如果jetty是5.x,用jetty5xtestsetup,如果是6.x,用jetty6xtestsetup,不過目前這個cactus用的還是jetty5.1.9(org.mortbay.jetty-5.1.9.jar),是以就用jetty5xtestsetup。

  就這些,jetty啟動很快,過段時間還要研究一下怎麼來測試struts2。   

最新内容請見作者的github頁:http://qaseven.github.io/