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给服务端后,一定要读取服务端的响应,这是必须的,否则服务端不处理.其实发送的数据被服务端接收后在缓冲中,并不是立即处理的.然后服务端把响应码和内容等反回给客户端.如果客户端只发送不接受, ...
随机推荐
- activity的测试工程activiti-explorer使用
1. activiti-explorer默认使用h2数据库,第一步要修改db.properties的配置,如果使用其他数据库的话,务必放入驱动包,oracle的ojdbc4不能用,会报错,要使用版本高 ...
- solr的原子更新/局部更新
solr支持三种类型的原子更新: set - to set a field. add - to add to a multi-valued field. inc - to increment a fi ...
- VC 为静态控件添加事件(修改ID号以后添加事件)
操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为静态控件添加事件,如:STATIC.Picture Control等等 有时候我们找到一个图片,为对话框背景添加 ...
- 给自己加油,一定要学会MFC!
我自己对于没有学会MFC始终耿耿于怀,都什么时代了啊,但是我仍然坚持会去学MFC,因为MFC虽然落后与复杂,但是在Windows平台上仍然是无所不能的(其实Windows平台仍然是唯一可以赚钱的平台, ...
- java1.8的几大新特性(一)
一.接口的默认方法与静态方法,也就是接口中可以有实现方法 public class Test { public static void main(String[] args) { Formula a= ...
- 【HDOJ】2045 不容易系列之(3)—— LELE的RPG难题
着色问题,递推,当超过3个块时,规律明显,此时可以是n-2的头尾重复+与头尾不同颜色,也可以是n-1+与头尾均不相同眼色情况.经典递推.注意long long. #include <stdio. ...
- Sum of Digits / Digital Root
Sum of Digits / Digital Root In this kata, you must create a digital root function. A digital root i ...
- oracle rac scan ip 用途 原理
Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...
- Android开发视频学习(2)
S02E05_Android当中的线程 Worker Thread不允许操作UI,只能在Main Thread操作UI S02E06_Handler(一) Handler,Looper,Message ...
- ArrayList源码解析
ArrayList简介 ArrayList定义 1 public class ArrayList<E> extends AbstractList<E> implements L ...