待測試的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/