使用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进行单元测试相关推荐

  1. java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  2. Java使用iText实现对PDF文件的操作

    iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. http://itextpdf.c ...

  3. 用JAVA Excel API 实现对Excel表格的读写更新 (转)

    package myexceltest; import jxl.*; import java.io.*; import jxl.write.*; /**  * <p>java读取Excel ...

  4. sql java 解析_Java 实现对Sql语句解析

    最近要实现一个简易的数据库系统,除了要考虑如何高效的存储和访问数据,建立表关系外,对基本的sql查询语句要做一个解析,这样我们才能知道用户的查询要求:因为时间关系,参考了已有的一篇文章,并对其实现中出 ...

  5. java poi读取word中附件_java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  6. 【JDBC】实现对JDBC 连接的简单封装

    package util;import java.sql.Connection; import java.sql.DriverManager;/**** 实现对JDBC 的封装* @author mq ...

  7. 通过servlet来实现对Mysql进行连接、插入、修改、删除操作

    通过servlet来实现对Mysql进行连接.插入.修改.删除操作 来自:http://blog.sina.com.cn/s/blog_4bea2fb10100f3w3.html package Se ...

  8. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

  9. java实现对HDFS增删改查(CRUD)等操作

    实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...

最新文章

  1. 成为优秀高级程序员的10个要点
  2. 最实用的logback讲解(1)
  3. 使用c#操作IBM WebSphere MQ
  4. linux内核支持的加密算法,Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口...
  5. Linux C语言连接MySQL 增删改查操作
  6. 继去年“技惊四座”之后,腾讯TPG图片格式在应用领域有了新进展
  7. jquery监听html状态,jquery监听页面刷新
  8. iocomp iPlot使用说明13 Limits绘图界限
  9. android stagefright
  10. 数字经济的网络黑手,中科信安:勒索软件攻击比去年同期增加7倍
  11. mysql mcafee audit_ libaudit
  12. 我的世界电脑锁屏.html,怎么设置电脑锁屏
  13. 车企号脉,资本试药,出行服务带病也要上场
  14. 论文阅读笔记《Deep Graph Matching under Quadratic Constraint》
  15. 主、谓、宾、定、状、补
  16. 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...
  17. VBA小模板,跨表统计的2种写法
  18. dva脚手架创建的项目目录结构分析
  19. AI中插入带圆圈的1-20数字
  20. 新站上线完整详细的SEO优化方案

热门文章

  1. fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  2. 荣耀X8碎屏2020-05-14
  3. [C++学习笔记](double*)malloc(n * sizeof(double));
  4. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(四)
  5. wpf cefsharp html源码,CefSharp For WPF基本使用
  6. 退出python交互模式_python如何退出交互模式
  7. Redis批量操作详解及性能分析
  8. MatConvnet工具箱文档翻译理解(2)
  9. NorthWest University - Medical Engineering
  10. 软件编程思想的些许感想