我们在web.xml中的webapp之间加入:
<
servlet
>
<
servlet-name
>
ServletRedirector
</
servlet-name
>
<
servlet-class
>
org.apache.cactus.server.ServletTestRedirector
</
servlet-class
>
<
init-param
>
<
param-name
>
param1
</
param-name
>
<
param-value
>
value1 used for testing
</
param-value
>
</
init-param
>
</
servlet
>

<
servlet
>
<
servlet-name
>
ServletTestRunner
</
servlet-name
>
<
servlet-class
>
org.apache.cactus.server.runner.ServletTestRunner
</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>
ServletRedirector
</
servlet-name
>
<
url-pattern
>
/ServletRedirector
</
url-pattern
>
</
servlet-mapping
>

<
servlet-mapping
>
<
servlet-name
>
ServletTestRunner
</
servlet-name
>
<
url-pattern
>
/ServletTestRunner
</
url-pattern
>
</
servlet-mapping
>
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;

public
class
SampleServlet
extends
HttpServlet
{
public void saveToSession(HttpServletRequest request)
{
String testparam = request.getParameter("testparam");
request.getSession().setAttribute("testAttribute", testparam);
}
}
import
junit.framework.Test;
import
junit.framework.TestSuite;

import
org.apache.cactus.ServletTestCase;
import
org.apache.cactus.WebRequest;

public
class
TestSampleServlet
extends
ServletTestCase
{
public TestSampleServlet(String theName)
{
super(theName);
}

public static Test suite()
{
return new TestSuite(TestSampleServlet.class);
}

public void beginSaveToSessionOK(WebRequest webRequest)
{
webRequest.addParameter("testparam", "it works!");
}

public void testSaveToSessionOK()
{
SampleServlet servlet = new SampleServlet();
servlet.saveToSession(request);
assertEquals("it works!", session.getAttribute("testAttribute"));
}
}
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
-
<
testsuites
>
-
<
testsuite name
=
"
com.test.servlet.TestServletTest
"
tests
=
"
1
"
failures
=
"
0
"
errors
=
"
1
"
time
=
"
0.516
"
>
-
<
testcase name
=
"
testSaveSessionToOK
"
time
=
"
0.36
"
>
<
error message
=
"
org/apache/commons/codec/DecoderException
"
type
=
"
java.lang.NoClassDefFoundError
"
>
java.lang.NoClassDefFoundError: org
/
apache
/
commons
/
codec
/
DecoderException at org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:
265
) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:
383
) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:
346
) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:
144
) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:
307
) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java:
1
) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:
163
) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:
81
) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:
307
) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java:
1
) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:
164
) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:
83
) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:
307
) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java:
1
) at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:
145
) at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:
218
) at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:
134
) at org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:
309
) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:
187
) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:
225
) at org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java:
1
) at javax.servlet.http.HttpServlet.service(HttpServlet.java:
690
) at javax.servlet.http.HttpServlet.service(HttpServlet.java:
803
) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290
) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206
) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
230
) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175
) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128
) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
104
) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109
) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
261
) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844
) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:
581
) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447
) at java.lang.Thread.run(Unknown Source)
</
error
>
</
testcase
>
</
testsuite
>
</
testsuites
>














加入mapping:










然后我们写一个简单的Servlet来进行测试:












对于此Servlet在xml的配置我就不写了.想必你也了然于心了吧.
来看看我们的测试类:































部署之后,启动Tomcat,访问:
http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet
这时候你会看到输出 :








看来程序没有大问题,已经正确执行.不过这时提示有一个类找不到.
对于这个问题我们可以去http://commons.apache.org/downloads/download_codec.cgi下载.
这个xml看起来多少不习惯.我们可以下载xsl把它转换成html格式.
点此下载 把它放到你web应用的根目录下.
这个时候你可以访问如下地址:
http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet&xsl=cactus-report.xsl
这时候你就会看到友好的Html格式了: