这是一个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的更多相关文章

  1. maven构建web项目,用jetty测试的配置pom.xml

    maven构建web项目,用jetty测试的配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  2. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  3. Jetty实战之 嵌入式Jetty运行Servlet

    http://blog.csdn.net/kongxx/article/details/7230080 Jetty实战之 嵌入式Jetty运行Servlet 分类:JettyJava (19530)  ...

  4. Jersy、Jetty和Servlet

    1.Jersy框架 Jersey RESTful WebService框架是一个开源的.产品级别的JAVA框架,是JAX-RS的参考实现.Jersey提供自己的API,其API继承自JAX-RS,提供 ...

  5. 测试servlet学习笔记

    操作方法: 1.新建工程: File——>new——>Java Project——>TestServlet(工程名称)——>Finish. 2.加载servlet-api.ja ...

  6. 多War包合并,jetty测试

    模块间的相互依赖引用配置在pom.xml中加入要依赖的模块即可<dependency>    <groupId>com.exayong</groupId>    & ...

  7. 测试Servlet生命周期例子程序

    写一个类TestLifeCycleServlet,生成构造器TestLifeCycleServlet();重写HttpServlet的doGet();重写GenericServlet的destroy( ...

  8. 在IE浏览器输入测试servlet程序报:HTTP Status 404(The requested resource is not available)错

    一.HTTP Status 404(The requested resource is not available)异常主要是路径错误或拼写错误造成的,请按以下步骤逐一排查: 1.未部署Web应用 2 ...

  9. 关于HttpURLConnection测试servlet

    把数据POST给服务端后,一定要读取服务端的响应,这是必须的,否则服务端不处理.其实发送的数据被服务端接收后在缓冲中,并不是立即处理的.然后服务端把响应码和内容等反回给客户端.如果客户端只发送不接受, ...

随机推荐

  1. Google考虑抛弃Cookies机制

    根据华尔街日报的报道,Google 正在考虑抛弃古老的浏览器 cookies 来追踪用户信息的机制.作为替代,Google 将开发一种「个人匿名标识机制」.Google 早前已经计划在 IE 和 iP ...

  2. 388A Fox and Box Accumulation

    一开始贪心策略想错了! #include<cstdio> #include<algorithm> using namespace std; ]; int main() { in ...

  3. DOM in Angular2

    <elementRef> import {ElementRef} from "@angular/core"; constructor(private element:  ...

  4. ThinkPHP中视图模型详解.

    很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相 ...

  5. ***Java多线程发展简史

    http://blog.jobbole.com/28297/ 本文来自四火的博客(@RayChase),由@_Zhijun 推荐 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的 ...

  6. USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制

    USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...

  7. Visual Assist X

    老师推荐的一款vc++6.0插件 visual assistx_百度百科 http://baike.baidu.com/view/4439152.htm?fr=aladdin 下载 VC++6.0助手 ...

  8. Standard Attachments in Oracle Form 标准附件

    Standard Attachments in Oracle Form 默认情况下"附件"按钮是灰色的,本文将展示如何让某个Form的附件按钮变亮,并能上传附件. 以用户Form为 ...

  9. Cannot Create Supplier Site (Address) (文档 ID 1069032.1)

    Error Address and Site Creation - Unable to create address and sites because of the following error ...

  10. VS2012启用SQLite的Data Provider

    VS 2012默认是不带的SQLite的Data Provider,所以无法直接在VS 2012里管理SQLite的数据库,自然也不能在VS里像SQL Server那样直接生成Entity Frame ...