使用Cactus+Jetty进行servelt的单元测试

今天在做《Junit In Action》关于cactus和jetty结合进行集成测试的例子,看看源代码很简单,但总是运行不起来,一波三折了好几个小时才搞定。我用的cactus是1.8.1,闲言少叙,上源代码,就2个类:

  待测试的servlet:


package junitbook.container;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class SampleServlet extends HttpServlet
{
    public boolean isAuthenticated(HttpServletRequest request)
    {
        HttpSession session = request.getSession(false);

        if (session == null)
        {
            return false;
        }
       
        String authenticationAttribute =
            (String) session.getAttribute("authenticated");
           
        return Boolean.valueOf(
            authenticationAttribute).booleanValue();
    }
}

  测试类:


package junitbook.container;

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;

public class TestSampleServletIntegration extends ServletTestCase
{
    private SampleServlet servlet;   

    public static Test suite()
    {
        System.setProperty("cactus.contextURL", "http://localhost:8080/test");// 这步很重要,一定要有

        TestSuite suite = new TestSuite("All tests with Jetty");
        suite.addTestSuite(TestSampleServletIntegration.class);
        return new Jetty5XTestSetup(suite);
    }

    protected void setUp()
    {
        servlet = new SampleServlet();
    }
    
    public void testIsAuthenticatedAuthenticated()
    {
        session.setAttribute("authenticated", "true");
        
        assertTrue(servlet.isAuthenticated(request));
    }

    public void testIsAuthenticatedNotAuthenticated()
    {
        assertFalse(servlet.isAuthenticated(request));
    }

    public void beginIsAuthenticatedNoSession(WebRequest request)
    {
        request.setAutomaticSession(false);
    }
    
    public void testIsAuthenticatedNoSession()
    {
        assertFalse(servlet.isAuthenticated(request));
    }
}

  有几点要说明:

  1.测试类要继承ServletTestCase,内置了session,request,response,可直接用

  2.jetty不要用单独下载的版本,每个cactus发行版都内置了一个jetty,在lib目录下可以找到,显然是改写过的,如果你用单独下载的,一定会抛出java.lang.NoSuchMethodException: org.mortbay.jetty.nio.SelectChannelConnector.setPort(java.lang.String),因为在单独的jetty发行版中,setPort用的参数是int,所以会抛异常,不知cactus为什么要这样搞。

  3.还要依赖commons codec这个jar

  4.如果jetty是5.x,用Jetty5XTestSetup,如果是6.x,用Jetty6XTestSetup,不过当前这个cactus用的还是jetty5.1.9(org.mortbay.jetty-5.1.9.jar),所以就用Jetty5XTestSetup。

  就这些,jetty启动很快,过段时间还要研究一下怎么来测试struts2。   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

时间: 2024-12-10 16:16:02

使用Cactus+Jetty进行servelt的单元测试的相关文章

ant+cactus+tomcat5.5容器内单元测试

一.下载并解压缩cactus 下载地址为http://java.chinaitlab.com/tools/45970.html.将cactus的lib目录下的cactus-ant-1.7.1.jar复制到ant的lib目录. 二.配置cactus cactus的配置很简单,新建一个cactus.properties文件,并把它放在ant脚本中的cactus任务的classpath下,文件中包括如下内容 cactus.sysproperties=cactus.contextURL #cactus-

spring3mvc框架开发中resin和tomcat默认servelt配置处理静态资源

spring3mvc框架开发中resin和tomcat默认servelt配置 解决的问题: 让静态资源不通过DispatcherServlet处理,由容器默认servlet来处理.   在spring3mvc框架开发,web.xml如下配置时     <servlet>         <servlet-name>task</servlet-name>         <servlet-class>org.springframework.web.servle

在Python的Flask框架中实现单元测试的教程

  在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾

iOS单元测试1

iOS单元测试1 iOS单元测试分为两种类型的测试: 应用测试.应用程序测试可以检查app的代码组件,比如计算机的算术运算的例子.你可以利用应用程序测试来确保你的UI空间控件保持原有位置,并且你的控件和控制器对象能够和对象模型正确地工作. 逻辑测试(库测试).逻辑测试可以检查独立代码的行为是否正确.利用逻辑测试,你可以将整个库的组件放在一起进行测试,通常测试对象是对象和方法. 性能测试:所谓性能测试,主要是评估一段代码运行的时间.(自己添加的,个人觉得应该也属于一类测试把).性能测试的格式:-

写有价值的单元测试

这是写给开发同学系列文档中的一篇,主要讲单元测试. 写这个系列的原因是发现开发同学,尤其是偏业务的开发同学对于软件开发中的很多实践和理论理解的不够清楚.比如设计文档,代码评审,单元测试,集成测试和自动化测试,持续集成和持续发布这样一些耳熟能详的概念,说起来每个开发同学都听过,但很多人并没有深入考虑过为什么要引入这些实践,实践需要哪些手段,要达到什么目的,要坚持什么原则?所以这些实践落地的过程也是千差万别,效果往往也不甚理想. 通过这一系列文档,我会把我所了解的每个实践的来源.适用范围和价值用最简

追求代码质量: 对Ajax应用程序进行单元测试

使用 GWT 更轻松地测试异步应用程序 简介: 您可能从编写 Ajax 应用程序中获得了极大乐趣,但是对它们执行单 元测试却着实让人头痛. 在本文中,Andrew Glover 着手解决 Ajax 的弱点( 其中之一),即应对异步 Web 应用程序执行单元测试的固有挑战.幸运的是, 他发现在 Google Web Toolkit 的帮助下,解决这个特殊的代码质量问题要比预 想的容易. Ajax 在近期无疑是 Web 开发界最时髦的字眼之一 -- 与 Ajax 相关的工具.框架.书籍以及 Web

Ubuntu 13.04 – Install Jetty 9

注:如果需要将jetty安装,并作为服务启动运行,请参考以下帖子: http://pietervogelaar.nl/ubuntu-12-04-install-jetty-9/ 下面我主要介绍作为jetty作为绿色版本在ubuntu13.04上的安装过程: Java 请参考以下帖子,安装配置java. Ubuntu 11.04 下安装配置 JDK 7    Download the latest Jetty distribution (9.x). 从下面的网站下载最新版本jetty,并解压. h

利用J2MEUnit进行单元测试

这样就可以使用了.三.编写测试类 让我们编写一个TestCase来学习如何使用这套工具.编写TestCase类 编写测试的类要继承j2meunit.framework.TestCase.如同JUnit中一样,你可以覆写setUp() 和tearDown()方法,虽然这里没有反射机制,但还是推荐你把测试方法以test开头.这样一但J2ME有了反射机制,你也可以快速的移植.还有一点要注意的是,你需要为子类提供一个构造函数(假设你的类叫做TestOne): public TestOne(String

Hibernate配置文件在单元测试中的应用

Hibernate 是一个流行的开源对象关系映射工具,单元测试和持续集成的重要性也得到了广泛的推广和认同,在采用了Hibernate的项目中如何保证测试的自动化和持续性呢?本文讨论了Hibernate加载其配置文件hibernate.properties和hibernate.cfg.xml的过程,以及怎么样将hibernate提供的配置文件的访问方法灵活运用到单元测试中. 介绍 Hibernate 是一个流行的开源对象关系映射工具,单元测试和持续集成的重要性也得到了广泛的推广和认同,在采用了Hi