Cactus借助Jetty测试Servlet
这是一个WebProject,但不需要web.xml,因为用不到它
首先是待测试的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下的测试用例LoginServletTest.java
其实它和上一篇文章"Cactus入门"里面的测试用例是一样的
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; 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作为辅助包
Assert.assertEquals(resp.getTables()[0].getCellAsText(0,0), "username");
Assert.assertEquals(resp.getTables()[0].getCellAsText(0,1), "password");
}
}
最后是JUnit3.8编写的测试套件TestAllUseJetty.java(为什么这么用,详见注释)
package com.jadyer.servlet; import junit.framework.Test;
import junit.framework.TestSuite; import org.apache.cactus.extension.jetty.Jetty5xTestSetup; /**
* Jetty中使用Cactus测试Servlet步骤如下
* @see 0)Cactus下载地址为http://archive.apache.org/dist/jakarta/cactus/
* @see 关于Jetty的简单用法,可参考我的博文http://blog.csdn.net/jadyer/article/details/9299485
* @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 nekoHTML.jar
* @see xercesMinimal.jar
* @see org.mortbay.jetty-5.1.9.jar(取自cactus-1.8.1-bin.zip)
* @see 2)编写测试用例
* @see 这里即LoginServletTest.java
* @see 3)编写测试套件
* @see 我们要在beginXxx之前启动Jetty,而Cactus不支持JUnit4中的annotation
* @see 所以为了实现类似@BeforeClass的功能,我们就借助JUnit3.8中测试套件,最后测试时直接运行此测试套件即可
* @see 关键JUnit3.8和JUnit4的测试套件编写规则,详见http://blog.csdn.net/jadyer/article/details/6013743
* @create Jul 5, 2013 4:05:00 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
public class TestAllUseJetty {
public static Test suite(){
//此时就不需要cactus.properties文件了,并且注意这里的值就不能以下划线结尾了,而端口则可任意设定
//另外在web.xml中也不需要配置org.apache.cactus.server.ServletTestRedirector及其映射了
System.setProperty("cactus.contextURL", "http://127.0.0.1:8088/testJettyAndCactus"); TestSuite suite = new TestSuite(); suite.addTestSuite(LoginServletTest.class); //记得要引入org.mortbay.jetty-5.1.9.jar,否则会报告java.lang.ClassNotFoundException: org.mortbay.jetty.Server
return new Jetty5xTestSetup(suite);
}
}
Cactus借助Jetty测试Servlet的更多相关文章
- maven构建web项目,用jetty测试的配置pom.xml
maven构建web项目,用jetty测试的配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...
- 测试Servlet生命周期学习笔记
测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...
- Jetty实战之 嵌入式Jetty运行Servlet
http://blog.csdn.net/kongxx/article/details/7230080 Jetty实战之 嵌入式Jetty运行Servlet 分类:JettyJava (19530) ...
- Jersy、Jetty和Servlet
1.Jersy框架 Jersey RESTful WebService框架是一个开源的.产品级别的JAVA框架,是JAX-RS的参考实现.Jersey提供自己的API,其API继承自JAX-RS,提供 ...
- 测试servlet学习笔记
操作方法: 1.新建工程: File——>new——>Java Project——>TestServlet(工程名称)——>Finish. 2.加载servlet-api.ja ...
- 多War包合并,jetty测试
模块间的相互依赖引用配置在pom.xml中加入要依赖的模块即可<dependency> <groupId>com.exayong</groupId> & ...
- 测试Servlet生命周期例子程序
写一个类TestLifeCycleServlet,生成构造器TestLifeCycleServlet();重写HttpServlet的doGet();重写GenericServlet的destroy( ...
- 在IE浏览器输入测试servlet程序报:HTTP Status 404(The requested resource is not available)错
一.HTTP Status 404(The requested resource is not available)异常主要是路径错误或拼写错误造成的,请按以下步骤逐一排查: 1.未部署Web应用 2 ...
- 关于HttpURLConnection测试servlet
把数据POST给服务端后,一定要读取服务端的响应,这是必须的,否则服务端不处理.其实发送的数据被服务端接收后在缓冲中,并不是立即处理的.然后服务端把响应码和内容等反回给客户端.如果客户端只发送不接受, ...
随机推荐
- [XJOI NOI2015模拟题13] B 最小公倍数 【找规律】
题目链接:XJOI - NOI2015-13 - B 题目分析 通过神奇的观察+打表+猜测,有以下规律和性质: 1) 删除的 n 个数就是 1~n. 2) 当 c = 2 时,如果 n + 1 是偶数 ...
- 判断数据库表字段是否为null值,采用is null
use UserCentergo select * from AccountDetails1.判断一个字段是否为null值,进行查询:update AccountDetails set Project ...
- Ember.js demo4
<!DOCTYPE html> <html> <head> <meta name="description" content=" ...
- Android fragment 回调函数改进
由于fragment的onResume()等回调的调用时机与Activity不一样,导致用起来比较麻烦,所以我重新封装了一下回调函数,十分简单. 使用时只需要继承此基类,使用onFragmentXXX ...
- wzplayer for android V1.5.3 (新增YUV文件播放)
wzplayer for android V1.5.3 新增功能 1.使用gl es2 播放 yuv 文件. 联系方式:weinyzhou86@gmail.com QQ:514540005 版权所有, ...
- FRM-40401 No changes to save error
FAQ: I have updated a table from the form and written a update statement in the when-button-pressed ...
- Codevs_1166_[NOIP2007]_矩阵取数游戏_(动态规划+高精度)
描述 http://codevs.cn/problem/1166/ 分析 #include <iostream> #include <cstring> #include < ...
- spring--资源--4
4.1.1 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理URL资源.File资源资源.ClassPath相关资源.服务器相关资源(JBoss AS 5.x上的VFS资源)等等 ...
- spring--AOP2--6
AOP 之 6.6 通知参数 前边章节已经介绍了声明通知,但如果想获取被被通知方法参数并传递给通知方法,该如何实现呢?接下来我们将介绍两种获取通知参数的方式. 使用JoinPoint获取:Spring ...
- HDU5668 Circle 非互质中国剩余定理
分析:考虑对给定的出圈序列进行一次模拟,对于出圈的人我们显然可以由位置,编号等关系得到一个同余方程 一圈做下来我们就得到了n个同余方程 对每个方程用扩展欧几里得求解,最后找到最小可行解就是答案. 当然 ...