`
ttitfly
  • 浏览: 623889 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用Cactus做容器内单元测试

阅读更多
1.cactus 属于jakarta下面的一个子项目,具体下载地址:http://jakarta.apache.org/cactus/index.html

2. 在web.xml里配置
 <servlet>
    <servlet-name>ServletTestRunner</servlet-name>
    <servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
    </servlet>
  <servlet-mapping>
    <servlet-name>ServletTestRunner</servlet-name>
    <url-pattern>/ServletTestRunner</url-pattern>
  </servlet-mapping>
  
  
  <servlet>
    <servlet-name>ServletTestRedirector</servlet-name>
    <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletTestRedirector</servlet-name>
    <!--这个url-pattern的值必须为/ServletRedirector,不能换成其它-->
    <url-pattern>/ServletRedirector</url-pattern>
  </servlet-mapping>


3.写个Servlet类
public class FirstServlet extends HttpServlet {
       public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		if(isLogin(request)){
			System.out.println("success");
		}else{
			System.out.println("fail");
			request.getSession().setAttribute("user", "users");
		}
		
	}

         public boolean isLogin(HttpServletRequest request){
		if(null == request.getSession().getAttribute("user")){
			return false;
		}else{
			return true;
		}
	}

}


对其里面的方法isLogin进行测试

4.测试类:FirstServletTest
import junit.framework.Assert;

import org.apache.cactus.ServletTestCase;

public class FirstServletTest extends ServletTestCase {

	public void testIsLogin(){
		FirstServlet test = new FirstServlet();
		boolean result = test.isLogin(request);
		Assert.assertEquals(false, result);
	}

}




A:用浏览器的方式进行测试
TestAll(不需要继承任何类)代码
import junit.framework.Test;
import junit.framework.TestSuite;

public class TestAll {
	
	public static Test suite(){
		TestSuite suite = new TestSuite("test all");
		suite.addTestSuite(FirstServletTest.class);
		return suite;
	}

}



启动服务,地址栏输入:http://localhost:8080/cactusTest/ServletTestRunner?suite=com.test.TestAll
则会以xml的形式返回测试结果,如果想以html的形式更直观的观察测试结果则需要下载cactus-report.xsl,并将该文件放在当前应用的根目录下。然后地址栏输入:
http://localhost:8080/cactusTest/ServletTestRunner?suite=com.test.TestAll&xsl=cactus-report.xsl,客户端会把服务器返回的xml结果根据该xsl转换成直观的html形式,在客户端进行转换。如果想让服务器端直接返回的是html的形式,而不是xml的形式,那么需要在web.xml里加个<init-param>参数,如下:
<servlet>
    <servlet-name>ServletTestRunner</servlet-name>
    <servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
    <init-param>
    	<param-name>xsl-stylesheet</param-name>
    	<param-value>cactus-report.xsl</param-value>
    </init-param>
    
  </servlet>

这样的话,只需要输入:http://localhost:8080/cactusTest/ServletTestRunner?suite=com.test.TestAll&transform=fds,transform的值可以随意,那么服务器端会自己将xml形式的测试结果直接转换成html,然后返回给客户端,就不需要客户端自己做转换了。

B:像普通的java application应用的TestCase一样直接在IDE里运行测试
FirstServletTest2测试类
package com.test;

import junit.framework.Assert;

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

public class FirstServletTest2 extends ServletTestCase {

	/**
	 *每个测试方法前都会去执行
	 */
	public void begin(WebRequest request){
		System.setProperty("cactus.contextURL", "http://localhost:8080/cactusTest");
		System.out.println("begin");
	}
	/**
	 *只是在isLogin测试方法前才会去执行
	 */
	public void beginIsLogin(WebRequest request){
		System.out.println("begin isLogin");
	}
	
	public void setUp(){
		System.out.println("setUp");
	}
	public void testIsLogin(){
		FirstServlet test = new FirstServlet();
		boolean result = test.isLogin(request);
		Assert.assertEquals(false, result);
	}
	public void tearDown(){
		System.out.println("tearDown");
	}
	/**
	 *每个测试方法后都会去执行
	 */
	public void end(WebResponse response){
		System.out.println("end");
	}
	
	/**
	 *只是在isLogin测试方法后才会去执行
	 */
	public void endIsLogin(WebResponse response){
		System.out.println("end isLogin");
	}

}


1 Cactus的执行流程分为两部分:客户端(Client)与服务器端(Server)

2 客户端部分:首先构造出准备向服务器端发送的请求参数。

客户端通过begin及beginXXX方法构造好请求参数后,与服务器端建立一个HTTP连接,然后向服务器端发送请求

3 服务器端:最重要的类是ServletTestRedirector类,它是一个Servlet,它收到客户端发送来的请求,然后通过反射生成测试类的实例,接下来调用其setUp,textXXX,tearDown方法,执行完毕后,向客户端发送响应(Response)

4. 客户端:收到响应后,执行endXXX,end方法,完成测试流程。

5. 在客户端执行的方法:begin,beginXXX,endXXX,end.

6. 在服务器端执行的方法:setUp,testXXX,tearDown.

也就是说测试类(FirstServletTest2 )被实例化了2次,在客户端实例化了一次,在服务器端也实例化了一次(ServletTestRedirector通过反射生成测试类的实例)
实际上客户端和服务器端进行的是2次连接,第一次是进行请求运行要测试的方法,第二次是将测试结果返回给客户端,即2次连接。只有服务器端的session是有值的,客户端的session是没有值的。
分享到:
评论
1 楼 hongye9992003 2009-02-05  
请问你用Cactus测过JSP吗?

相关推荐

    cactus-1.8.1-bin.zip

    Cactus是一款用于Java Web应用程序单元测试的开源工具。在深入探讨Cactus的1.8.1版本之前...通过解压并分析`cactus-1.8.1-bin.zip`文件,开发者可以快速开始使用Cactus进行有效的单元测试,提高代码质量和项目稳定性。

    cactus的学习笔记(一)

    在IT行业中,Cactus是一个非常重要的工具,尤其对于软件开发者来说,它是一个用于在服务器端进行单元测试的框架。这篇“Cactus的学习笔记(一)”可能会涵盖Cactus的基本概念、安装过程、如何配置以及如何编写和运行...

    Developing and Unit Testing with Cactus

    ### 开发与单元测试:利用Cactus框架在WebSphere Studio Application Developer中的应用 #### Cactus框架简介 Cactus是Apache Software Foundation(ASF)Jakarta项目下的一个开源子项目,主要功能在于提供一种...

    使用EJB+Struts1.3+Ant+Cactus+DbUnit+JMeter+StrutsTest实现测试2

    本项目利用一系列强大的工具,如EJB(Enterprise JavaBeans)、Struts 1.3、Ant构建工具、Cactus测试框架、DbUnit数据库单元测试工具、JMeter性能测试工具以及StrutsTest扩展,来实现一个全面的测试流程。...

    cactus-源码.rar

    1. **理解Web服务的测试原理**:Cactus的实现方式揭示了如何在服务器端进行单元测试,有助于提高测试的准确性和效率。 2. **提升框架设计能力**:Cactus的模块化设计和适配器模式可以作为学习框架设计的良好案例。...

    JUnit.in.Action中文版

    ·用Cactus进行容器内测试 ·用Ant和Maven进行自动构建(★★★★★) ·在Eclipse内进行测试 ·对如下内容进行单元测试  ◆Java应用程序(★★)  ◆Filter  ◆Servlet (★★★★)   ◆EJB  ◆JSP (★...

    Junit实战(第2版)

    包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit测试、持续集成工具、表示层的测试、Ajax测试、...

    Junit实战第二版

    包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mock objects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit测试、持续集成工具、表示层的测试、Ajax测试、...

    JUnit教程工程代码实例

    Cactus通过模拟容器环境,使开发者能够在不部署整个应用程序的情况下进行EJB的单元测试。 "CactusWebTest"则关注于Web应用程序的测试。在这个部分,你将学习如何使用Cactus来测试Servlets、JSP和过滤器等Web组件。...

    Java极限编程

    JUnit是一个广泛使用的Java单元测试框架,旨在帮助开发者编写高质量的代码。通过JUnit,开发者可以轻松地为Java类编写测试用例,并自动运行这些测试来验证代码的行为是否符合预期。单元测试是极限编程的重要组成部分...

    Java静态分析Java代码检查.pdf

    对于Java EE类,Jtest会自动生成Cactus测试用例,确保在真实容器中进行测试。 5. **Jtest Tracer**:此功能监控应用程序的实时配置,通过捕获实际功能测试的行为来扩展回归测试用例。当测试用例中的功能出现问题时...

    JUnit_in_Action,_2nd_Edition.pdf

    - **第7章:容器内测试**:探讨如何在特定环境下进行测试。 - **第三部分:JUnit与构建过程** - **第8章:使用Ant运行JUnit测试**:展示如何配置Ant来自动化JUnit测试流程。 - **第9章:使用Maven 2运行JUnit测试...

    java极限编程

    2. **掌握工具**:介绍了多个开源工具的使用方法,如Ant、JUnit、Cactus等,这些工具在持续集成、单元测试等方面起着至关重要的作用。 3. **API与标签参考**:这部分内容提供了书中提到的各种工具的详细API文档和...

    Junit实战第二版 中文完整版.pdf

    - **定义**:JUnit是一个广泛使用的Java单元测试框架,旨在简化测试过程并提高软件质量。 - **版本更新**:本书重点介绍了JUnit 4.8版本,该版本对Java开发流程进行了显著优化,包括对新应用程序类型的支持,如基于...

    Java静态分析Java代码检查.docx

    对于Java EE应用,Jtest会自动生成Cactus测试用例,确保在真实的Java容器环境中进行测试。 4. **回归测试和行为捕获**:Jtest的Tracer功能允许在应用程序的实际配置下捕获测试行为,扩展回归测试用例。通过执行测试...

Global site tag (gtag.js) - Google Analytics