cactus java,使用cactus实现对servlet进行单元测试
使用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) 编辑 收藏 所属分类: 软件测试
cactus java,使用cactus实现对servlet进行单元测试相关推荐
- java用poi实现对word读取和修改操作
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...
- Java使用iText实现对PDF文件的操作
iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. http://itextpdf.c ...
- 用JAVA Excel API 实现对Excel表格的读写更新 (转)
package myexceltest; import jxl.*; import java.io.*; import jxl.write.*; /** * <p>java读取Excel ...
- sql java 解析_Java 实现对Sql语句解析
最近要实现一个简易的数据库系统,除了要考虑如何高效的存储和访问数据,建立表关系外,对基本的sql查询语句要做一个解析,这样我们才能知道用户的查询要求:因为时间关系,参考了已有的一篇文章,并对其实现中出 ...
- java poi读取word中附件_java用poi实现对word读取和修改操作
java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...
- 【JDBC】实现对JDBC 连接的简单封装
package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...
- 通过servlet来实现对Mysql进行连接、插入、修改、删除操作
通过servlet来实现对Mysql进行连接.插入.修改.删除操作 来自:http://blog.sina.com.cn/s/blog_4bea2fb10100f3w3.html package Se ...
- java iris_利用K-Means聚类算法实现对iris.data.ulab
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...
- java实现对HDFS增删改查(CRUD)等操作
实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...
最新文章
- 成为优秀高级程序员的10个要点
- 最实用的logback讲解(1)
- 使用c#操作IBM WebSphere MQ
- linux内核支持的加密算法,Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口...
- Linux C语言连接MySQL 增删改查操作
- 继去年“技惊四座”之后,腾讯TPG图片格式在应用领域有了新进展
- jquery监听html状态,jquery监听页面刷新
- iocomp iPlot使用说明13 Limits绘图界限
- android stagefright
- 数字经济的网络黑手,中科信安:勒索软件攻击比去年同期增加7倍
- mysql mcafee audit_ libaudit
- 我的世界电脑锁屏.html,怎么设置电脑锁屏
- 车企号脉,资本试药,出行服务带病也要上场
- 论文阅读笔记《Deep Graph Matching under Quadratic Constraint》
- 主、谓、宾、定、状、补
- 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...
- VBA小模板,跨表统计的2种写法
- dva脚手架创建的项目目录结构分析
- AI中插入带圆圈的1-20数字
- 新站上线完整详细的SEO优化方案
热门文章
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 荣耀X8碎屏2020-05-14
- [C++学习笔记](double*)malloc(n * sizeof(double));
- 专栏 | 基于 Jupyter 的特征工程手册:特征选择(四)
- wpf cefsharp html源码,CefSharp For WPF基本使用
- 退出python交互模式_python如何退出交互模式
- Redis批量操作详解及性能分析
- MatConvnet工具箱文档翻译理解(2)
- NorthWest University - Medical Engineering
- 软件编程思想的些许感想