读书人

Eclipse IDE上 Cactus + Jetty 对 Ser

发布时间: 2012-07-19 16:02:20 作者: rapoo

Eclipse IDE下 Cactus + Jetty 对 Servlet 的测试

在开发J2EE Web项目时,测试过程常涉及到代码与Web Container的整合测试。测试过程通常分为:开发、部署、测试、修改四个环节。其中部署环节繁琐,大大降低了测试效率。
?
这里介绍使用Cactus+Jetty的测试方法,以期缩短部署环节,提高整体测试及开发效率。本文内容建构于Vincent Massol的《JUnit In Action》(Manning 2004)、网友Blog以及自己的实践。
?
Cactus 是Apache 基金会的开源项目之一,是JUnit测试在Web 应用方面的扩展。其官方文档称其功能可以涵盖主要的三类测试框架,包括:单元逻辑测试、整合单元测试及功能单元测试,其主要用途集中与J2EE环境下的整合单元测试(见:http://jakarta.apache.org/cactus/)。
?
使用过Eclipse的朋友一定体验过在Eclipse环境下使用JUnit的方便。Cactus是对JUnit的扩展,在Eclipse环境下的界面和JUnit框架一致,所以如果你熟悉JUnit界面,使用Cactus也很容易。
?
Jetty是一款纯Java开发的Web 应用服务器,这点和tomcat相似。但Jetty比tomcat使用更方便,可以嵌入代码中,以编程式的方式手动启动。这就免去了使用者手工启动Web服务的麻烦,为全自动测试提供了基础(关于Jetty 可从http://docs.codehaus.org/display/JETTY
获取更详细的信息)。
?
现在开始测试框架的搭建。
?
一.创建测试项目
首先打开Eclipse,创建一个新的Web项目。如果存在已有的Web项目,步骤也大致相同。

Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试

为了首先测试代码与业务代码的分离,我的项目接受了JUnit In Action中的建议,采用“分离但等同”的目录结构,既测试类和被测试代码在同一个包内,却分到不同的目录中。这样做的好处在于,如果项目开发完成,可以很快的从项目中分离测试代码,加快发布速度。
?
在这里,我创建了一个新的Source Folder test来存放测试类文件,系统自建的src目录存放被测试代码。
?Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试
另外,为了能够使用Cactus及Jetty框架,需要将相应的库文件导入项目的库中。具体步骤如下:
1.?????? 导入以下jar包:
junit-3.8.1.jar (JUint 类库)
aspectjrt-1.2.1.jar
cactus-1.7.2.jar????? (Cactus 主要类库)
commons-httpclient-2.0.2.jar
commons-logging-1.0.4.jar
org.mortbay.jetty-4.2.17.jar?? (Jetty 的主要类库,建议使用cactus提供的,笔者曾经尝试过最新的Jetty 6.1 但没有整合成功)
servletapi-2.3.jar???? (支持 J2EE Servlet 库文件)
到项目的WEB-INF/lib/下。

Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试

注意,根据所使用版本Cactus及JUnit的版本不同,文件命会有相应的不同。
?
2.?????? 在Eclipse中刷新项目。
?
具体生成后的目录结构如下:
?Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试
二.创建Servlet类及测试类
1.在src/defaultpackage中,创建被测试的servlet类SampleServlet:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
?
public class SampleServlet extends HttpServlet {
?????? /**
??????? *
??????? */
?????? private static final long serialVersionUID = 1L;
?
?????? public void saveToSession(HttpServletRequest request) {
????????????? String testparam = request.getParameter("testparam");
????????????? request.getSession().setAttribute("testAttribute", testparam);
?????? }
?
}

2. 在test/defaultpackage中,创建测试类ServletTestCase:
import junit.framework.Test;
import junit.framework.TestSuite;
?
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import org.apache.cactus.extension.jetty.JettyTestSetup;
?
public class TestSampleServlet extends ServletTestCase {
?????? public TestSampleServlet(String theName) {
????????????? super(theName);
?????? }
?
?????? public static Test suite() {
????????????? System.setProperty("cactus.contextURL",
???????????????????? "http://localhost:8081/Cactus");
????????????? TestSuite suite = new TestSuite();
????????????? suite.addTestSuite(TestSampleServlet.class);
????????????? return new JettyTestSetup(suite);
?????? }
?
?????? public void beginSaveToSessionOK(WebRequest webRequest) {
????????????? webRequest.addParameter("testparam", "it works!");
?????? }
?
?????? public void testSaveToSessionOK() {
????????????? SampleServlet servlet = new SampleServlet();
????????????? servlet.saveToSession(request);
????????????? assertEquals("it works!", session.getAttribute("testAttribute"));
?????? }
?
}
?
注意其中“System.setProperty("cactus.contextURL",????? "http://localhost:8081/Cactus");”语句,该语句设置了Cactus启动Jetty服务器时,jetty服务器所开设服务的URL。这个值就是web服务供外界访问的URL地址。另外,这个值也可以通过Eclipse设置JUnit启动参数的方法设置,在此不再赘述。
?
三.测试
在Eclipse中运行JUnit。
?Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试
查看输出结果:

Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试

及输出日志:


?Eclipse IDE上 Cactus + Jetty 对 Servlet 的测试
好了,这个简单的例子就讲到这里。随着对Web测试研究的深入,我会发布更多的文章和大家一起探讨。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/james_wu_shanghai/archive/2008/03/11/2167503.aspx

读书人网 >Eclipse开发

热点推荐