Cactus入门
这是一个WebProject,有关Cactus用法详见本文测试用例
首先是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 本文中的Cactus是依托于Tomcat启动后来进行测试的 -->
<!-- 如果是依托于Jetty则不需要web.xml和cactus.properties -->
<!-- 关于Jetty的简单用法,可参考我的博文http://blog.csdn.net/jadyer/article/details/9299485 -->
<servlet>
<servlet-name>ServletTestRedirector</servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTestRedirector</servlet-name>
<!-- 这里要求是固定的"/ServletRedirector" -->
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>
</web-app>
下面是待测试的LoginServlet.java
package com.jadyer.servlet; 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 = 6655227641354075528L; @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<table><tr><td>username</td><td>password</td></tr></table>");
out.flush();
out.close();
} public boolean login(HttpServletRequest request){
String loginUser = (String)request.getSession().getAttribute("loginUser");
if(null==loginUser || !"http://blog.csdn.net/jadyer".equals(loginUser)){
System.out.println("用户[" + loginUser + "]登录失败");
return false;
}
System.out.println("用户[" + loginUser + "]登录成功");
return true;
}
}
下面是Cactus运行时要用到的,位于test SourceFolder下面的cactus.properties
#键名固定,键值模式为http://localhost:port/contextRoot/(是否以斜线结尾均可,但这里的端口要与Web服务器的启动端口一致)
cactus.contextURL=http://127.0.0.1:8088/Cactus_demo/
最后是使用Cactus编写的位于test SourceFolder下的测试用例LoginServletTest.java
package com.jadyer.servlet; import java.io.IOException; import javax.servlet.ServletException; import junit.framework.Assert; import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import org.xml.sax.SAXException; import com.meterware.httpunit.WebResponse; /**
* @see ----------------------------------------------------------------------------------------------------
* @see Cactus简介
* @see Cactus可以模拟JavaEE容器进行测试JSP、Servlet、Filter和EJB等
* @see Cactus不支持JUnit4中的annotation,它主要是基于JUnit3.8进行操作的
* @see Cactus下载地址为http://archive.apache.org/dist/jakarta/cactus/
* @see ----------------------------------------------------------------------------------------------------
* @see Cactus工作流程(分为ClientSide和ServerSide)
* @see ClientSide中包括beginXxx()和endXxx()方法,ServerSide中包括setUp()和testXxx()和tearDown()等方法
* @see 执行顺序为beginXxx->setUp->testXxx->tearDown->endXxx->beginYyy->setUp->testYyy->tearDown->endYyy
* @see 可以粗略的将beginXxx和endXxx方法理解为JUnit4中的@BeforeClass和@AfterClass,尽管它们俩之间并没有什么联系
* @see 注意:这里beginXxx和testXxx方法中的Xxx要是一样的,如beginLogin()和testLogin(),如此这俩方法才能对应上
* @see ----------------------------------------------------------------------------------------------------
* @see Cactus编写方法
* @see 1)引入它所依赖的基础jar
* @see aspectjrt-1.5.3.jar
* @see cactus.core.framework.uberjar.javaEE.14-1.8.1.jar
* @see cactus.integration.ant-1.8.1.jar
* @see cactus.integration.shared.api-1.8.1.jar
* @see commons-codec-1.6.jar(需单独下载)
* @see commons-discovery-0.4.jar
* @see commons-httpclient-3.1.jar
* @see commons-logging-1.1.jar
* @see geronimo-j2ee-management_1.0_spec-1.1.jar
* @see httpunit-1.6.jar
* @see Tidy.jar或者nekoHTML.jar和xercesMinimal.jar(本例中的endDoGet()方法要用到)
* @see (nekoHTML的下载地址为http://sourceforge.net/projects/nekohtml/files/)
* @see (其中nekoHTML.jar和xercesMinimal.jar均可从下载到的nekohtml-1.9.18.zip找到,Tidy.jar想用的话也要单独下载)
* @see 2)classpath下编写一个名为cactus.properties的文件,文件内容如下
* @see #键名固定,键值模式为http://localhost:port/contextRoot/(是否以斜线结尾均可,但这里的端口要与Web服务器的启动端口一致)
* @see cactus.contextURL=http://127.0.0.1:8088/Cactus_demo/
* @see 3)在web.xml中配置org.apache.cactus.server.ServletTestRedirector映射,固定为"/ServletRedirector"
* @see 4)编写一个继承了org.apache.cactus.ServletTestCase的类(它内部间接继承了junit.framework.TestCase)
* @see 这样此类便自动拥有了ServletAPI引用,比如要使用HttpSession就可以直接session.setAttribute()
* @see ----------------------------------------------------------------------------------------------------
* @see 就本例而言,它的缺点是每一次测试Servlet时都要启动Tomcat
* @see 如果不想每次都启动Web服务器,那么可以考虑使用嵌入式服务器,目前最好用的嵌入式服务器也是最火的就是Jetty
* @see 关于Jetty的简单用法,可参考我的博文http://blog.csdn.net/jadyer/article/details/9299485
* @see ----------------------------------------------------------------------------------------------------
* @create Jul 4, 2013 7:21:09 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
public class LoginServletTest extends ServletTestCase {
private LoginServlet loginServlet; //它是在ServerSide执行的
public void setUp(){
loginServlet = new LoginServlet();
} //beginXxx()方法是在ClientSide执行的
//如果想在testLogin()中获取到这里request添加的username参数,那么这个方法就应该命名为beginLogin()
public void beginLogin(WebRequest request){
request.addParameter("username", "Jadyer");
} //它是在ServerSide执行的
public void testLogin(){
//获取GET参数
Assert.assertEquals(request.getParameter("username"), "Jadyer");
//登录失败
//session.setAttribute("loginUser", "玄玉<http://blog.csdn.net/jadyer>");
Assert.assertFalse(loginServlet.login(request));
//登录成功
session.setAttribute("loginUser", "http://blog.csdn.net/jadyer");
Assert.assertTrue(loginServlet.login(request));
} //它是在ServerSide执行的
public void testDoGet() throws ServletException, IOException {
loginServlet.doGet(request, response);
} //endXxx()方法是在ClientSide执行的,该方法对应testDoGet()
public void endDoGet(WebResponse resp) throws SAXException {
//这里使用com.meterware.httpunit.WebResponse,而非org.apache.cactus.WebResponse,前者提供了很多增强功能
//但在使用httpunit中的WebResponse时,要额外借助Tidy.jar或者nekoHTML.jar和xercesMinimal.jar作为辅助包
Assert.assertEquals(resp.getTables()[0].getCellAsText(0,0), "username");
Assert.assertEquals(resp.getTables()[0].getCellAsText(0,1), "password");
}
}
Cactus入门的更多相关文章
- Cactus借助Jetty测试Servlet
这是一个WebProject,但不需要web.xml,因为用不到它 首先是待测试的LoginServlet.java package com.jadyer.servlet; import java.i ...
- AngularJS快速入门指南08:表格
ng-repeat指令非常适合用来显示表格. 在表格中显示数据 在AngularJS中显示表格非常容易: <div ng-app="myApp" ng-controller= ...
- HttpClient入门
HttpClient入门 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H ...
- (1)Maven快速入门_1maven安装
Maven 快速入门 1.1 Maven官网下载 windows 系统 下载 下图红色框选处. 下载到本地解压, 创建一个本地maven仓库的目录 maven_lib 配置Maven的环境变量 ...
- BZOJ1023[SHOI2008]cactus仙人掌图 【仙人掌DP】
题目 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌 图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回路. 举例来说 ...
- Cactus详细讲解
Cactus建议一年以上有经验的人玩,刚入门MVC,不了解下列组件请先自行学习,切勿好高骛远. Cactus的组成(基于.net4.5.2):Dapper+MVC4+autofac 前端css框架pu ...
- BZOJ1023: [SHOI2008]cactus仙人掌图(仙人掌)
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- Spring入门编程问题集锦Top10
我写的一篇文章,希望对spring初学者有所帮助: 1.如何学习Spring? 你可以通过下列途径学习spring: ①. spring下载包中doc目录下的MVC-step-by-step和samp ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
随机推荐
- 继续完成昨天的第一个点:更改DJANGO的ADMIN后台的表单显示
遇到的问题是MANYTOMANY的选项太多,默认的DJANGO一个多选框搞得人蛋疼, 于是作了一个扩展,不是最好的,但方便多啦.. 也是在昨天说过的各个app的admin.py里操作: from dj ...
- 一个CLI的 的例子
1)这是CLI 调用HTTPOST例子 #using <System.dll> using namespace System;using namespace System::Net;usi ...
- poj2187
求最远点对,这是一道经典的旋转卡壳的题目话说由于是前年写的,之后就没怎么研究过计算几何了……感觉都不大记得清了,来稍微回忆一下……首先最远点对一定出现在凸包上显然,然后穷举肯定不行,这时候就需要旋转卡 ...
- 不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime
不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime 前一段时间图片处理服务一直报“System.Format ...
- spring--AOP1--6
AOP 之 6.1 AOP基础 6.1.1 AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的 ...
- [liu yanling]软件开发的过程按阶段划分有:单元测试 集成测试 系统测试 验收测试
从软件开发的过程按阶段划分有:单元测试 集成测试 系统测试 验收测试测试过程按 4 个步骤进行,概念内容如下:单元测试:单元测试是对软件基本组成单元(如函数.类的方法等)进行的测试.集成测试:集成测试 ...
- 【转】Install MATLAB 2013a on CentOS 6.4 x64 with mode silent
首先要下载安装光盘. Matlab801_MacUnix.iso [root@db-172-16-3-150 mnt]# md5sum /ssd1/Matlab801_MacUnix.iso 0d3 ...
- HW4.2
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- POJ1006 - Biorhythms(中国剩余定理)
题目大意 略...有中文... 题解 就是解同余方程组 x≡(p-d)(mod 23) x≡(e-d)(mod 28) x≡(i-d)(mod 33) 最简单的中国剩余定理应用.... 代码: #in ...
- uva_12535 - Probability Through Experiments
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...