使用cactus实现对servlet进行单元测试
步骤如下:
[1]创建Web工程ServletTestDemo
在myeclipse中创建Web project,命名为ServletTestDemo
[2]下载cactus-bin-1.8
从apache官方网站下载
[3] 导入cactus的相关包到项目的lib目录
导入后,/WebRoot/WEB-INF/lib目录结构如下所示:
|-- lib
| |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar
| |-- cactus.integration.ant-1.8.1.jar
| |-- cactus.integration.shared.api-1.8.1.jar
| |-- commons-codec-1.4.jar
| |-- commons-httpclient-3.1.jar
| |-- commons-logging-1.1.jar
| |-- httpunit-1.6.jar
| `-- junit-3.8.2.jar
[4]配置项目web.xml
在项目web.xml中添加如下内容:
ServletRedirector
org.apache.cactus.server.ServletTestRedirector
param1
value1 used for testing
ServletTestRunner org.apache.cactus.server.runner.ServletTestRunner
ServletRedirector
/ServletRedirector
ServletTestRunner
/ServletTestRunner
[5]创建Servlet
创建LoginServlet,代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("//W3C//DTD HTML 4.01 Transitional//EN"">");
out.println("");
out.println("
A Servlet");out.println("
");out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" ");
out.println("");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("//W3C//DTD HTML 4.01 Transitional//EN"">");
out.println("");
out.println("
A Servlet");out.println("
");out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" ");
out.println("");
out.flush();
out.close();
}
public String getServletInfo() {
return "This is my default servlet created by Eclipse";
}
public void init() throws ServletException {
}
public void saveSession(HttpServletRequest request)
{
String testparam = request.getParameter("testparam");
request.getSession().setAttribute("testAttribute", testparam);
}
}
[6]修改项目web.xml,添加servlet映射
在web.xml中添加如下内容:
LoginServlet
LoginServlet
LoginServlet
/login
[7]创建Servlet测试类
创建TestLoginServlet,代码如下:
import java.io.IOException;
import javax.servlet.ServletException;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import com.meterware.httpunit.WebResponse;
public class TestLoginServlet extends ServletTestCase {
public TestLoginServlet(String theName) {
super(theName);
}
public static Test suite() {
return new TestSuite(TestLoginServlet.class);
}
public void beginSaveSessionOk(WebRequest webRequest) {
webRequest.addParameter("testparam", "it works!");
}
public void testSaveSessionOk() {
LoginServlet servlet = new LoginServlet();
servlet.saveSession(request);
assertEquals("it works!", session.getAttribute("testAttribute"));
}
public void endSaveSessionOk(WebResponse response) {
System.out.println("end save session ok");
}
public void beginDoGet(WebRequest webRequest) {
webRequest.addParameter("testparam", "it works!");
}
public void testDoGet() {
LoginServlet servlet = new LoginServlet();
try {
servlet.doGet(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[8]复制测试结果报表样式
复制cactus-report.xsl到项目的根目录。
在测试结果显示时需要此样式。
[9]验证目录结构
执行完以上操作, 目录结构如下图:
.
|-- src
| |-- LoginServlet.java
| `-- TestLoginServlet.java
`-- WebRoot
|-- cactus-report.xsl
|-- index.jsp
|-- META-INF
| `-- MANIFEST.MF
`-- WEB-INF
|-- cactus.properties---
|-- classes
| |-- LoginServlet.class
| `-- TestLoginServlet.class
|-- lib
| |-- cactus.core.framework.uberjar.javaEE.14-1.8.1.jar
| |-- cactus.integration.ant-1.8.1.jar
| |-- cactus.integration.shared.api-1.8.1.jar
| |-- commons-codec-1.4.jar
| |-- commons-httpclient-3.1.jar
| |-- commons-logging-1.1.jar
| |-- httpunit-1.6.jar
| `-- junit-3.8.2.jar
`-- web.xml
[10]启动服务
[11]执行测试
在浏览器地址栏,输入:
-
-
此测试结果是以xml的形式显示。
如果结构以html报表的形式显示,可以输入如下地址:
回车,结果如下:
Unit Test Results
Designed for use with Cactus.
Summary
Tests
Failures
Errors
Success rate
Time
2
0
0
100.00%
0.527
Note: failures are anticipated and checked for with assertions while errors are unanticipated.
TestCase TestLoginServlet
Name
Status
Type
Time(s)
testSaveSessionOk
Success
0.516
testDoGet
Success
0.010
posted on 2010-10-18 15:30 zhyiwww 阅读(1553) 评论(1) 编辑 收藏 所属分类: 软件测试