设为首页 收藏本站
查看: 1150|回复: 0

[经验分享] Eclipse IDE下 Cactus + Jetty 对 Servlet 的测试

[复制链接]

尚未签到

发表于 2017-2-27 09:12:16 | 显示全部楼层 |阅读模式
  在开发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项目,步骤也大致相同。
DSC0000.jpg

  为了首先测试代码与业务代码的分离,我的项目接受了JUnit In Action中的建议,采用“分离但等同”的目录结构,既测试类和被测试代码在同一个包内,却分到不同的目录中。这样做的好处在于,如果项目开发完成,可以很快的从项目中分离测试代码,加快发布速度。
 
在这里,我创建了一个新的Source Folder test来存放测试类文件,系统自建的src目录存放被测试代码。
  DSC0001.jpg
另外,为了能够使用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/下。
DSC0002.jpg

  注意,根据所使用版本Cactus及JUnit的版本不同,文件命会有相应的不同。
 
2.       在Eclipse中刷新项目。
 
具体生成后的目录结构如下:
  DSC0003.jpg
二.创建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。
  DSC0004.jpg
查看输出结果:
DSC0005.jpg

  及输出日志:
  
  DSC0006.jpg
好了,这个简单的例子就讲到这里。随着对Web测试研究的深入,我会发布更多的文章和大家一起探讨。
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/james_wu_shanghai/archive/2008/03/11/2167503.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347697-1-1.html 上篇帖子: 在Eclipse中使用Maven jetty的debug模式 下篇帖子: jetty 请求的操作无法在使用用户映射区域打开的文件上执行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表