`

Cactus容器测试入门

阅读更多

此文参考: http://jakarta.apache.org/cactus/integration/howto_tomcat.html

我们在web.xml中的webapp之间加入:

<servlet>
  
<servlet-name>ServletRedirector</servlet-name>
  
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  
<init-param>
    
<param-name>param1</param-name>
    
<param-value>value1 used for testing</param-value>
  
</init-param>
</servlet>

<servlet>
  
<servlet-name>ServletTestRunner</servlet-name>
  
<servlet-class>org.apache.cactus.server.runner.ServletTestRunner</servlet-class>
</servlet>

加入mapping:

<servlet-mapping>
    
<servlet-name>ServletRedirector</servlet-name>
    
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>

<servlet-mapping>
    
<servlet-name>ServletTestRunner</servlet-name>
    
<url-pattern>/ServletTestRunner</url-pattern>
</servlet-mapping>



然后我们写一个简单的Servlet来进行测试:

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

public class SampleServlet extends HttpServlet
{
    
public void saveToSession(HttpServletRequest request)
    
{
        String testparam 
= request.getParameter("testparam");
        request.getSession().setAttribute(
"testAttribute", testparam);
    }

}


对于此Servlet在xml的配置我就不写了.想必你也了然于心了吧.

来看看我们的测试类:

import junit.framework.Test;
import junit.framework.TestSuite;

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

public class TestSampleServlet extends ServletTestCase
{
    
public TestSampleServlet(String theName)
    
{
        
super(theName);
    }


    
public static Test suite()
    
{
        
return new TestSuite(TestSampleServlet.class);
    }


    
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"));
    }

}



部署之后,启动Tomcat,访问:

http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet
这时候你会看到输出 :

<?xml version="1.0" encoding="UTF-8" ?> 
- <testsuites>
- <testsuite name="com.test.servlet.TestServletTest" tests="1" failures="0" errors="1" time="0.516">
- <testcase name="testSaveSessionToOK" time="0.36">
  
<error message="org/apache/commons/codec/DecoderException" type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException at org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:265) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:383) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody0(HttpClientConnectionHelper.java:144) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect_aroundBody1$advice(HttpClientConnectionHelper.java:307) at org.apache.cactus.internal.client.connector.http.HttpClientConnectionHelper.connect(HttpClientConnectionHelper.java:1) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callRunTest(DefaultHttpClient.java:163) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:81) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:307) at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java:1) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:164) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:83) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:307) at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java:1) at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:145) at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:218) at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:134) at org.apache.cactus.server.runner.ServletTestRunner.run(ServletTestRunner.java:309) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody0(ServletTestRunner.java:187) at org.apache.cactus.server.runner.ServletTestRunner.doGet_aroundBody1$advice(ServletTestRunner.java:225) at org.apache.cactus.server.runner.ServletTestRunner.doGet(ServletTestRunner.java:1) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)</error> 
  
</testcase>
  
</testsuite>
  
</testsuites>


看来程序没有大问题,已经正确执行.不过这时提示有一个类找不到.
对于这个问题我们可以去http://commons.apache.org/downloads/download_codec.cgi下载.

这个xml看起来多少不习惯.我们可以下载xsl把它转换成html格式.
点此下载 把它放到你web应用的根目录下.

这个时候你可以访问如下地址:
http://localhost:8080/test/ServletTestRunner?suite=TestSampleServlet&xsl=cactus-report.xsl

这时候你就会看到友好的Html格式了:
HTML output of ServletTestRunner

々上善若水々 2008-06-01 01:11 发表评论
分享到:
评论

相关推荐

    cactus的学习笔记(一)

    Cactus通过将测试代码插入到服务器端的Servlet容器中,使得测试可以直接作用于实际运行环境中的代码,确保了测试的真实性和完整性。这与JUnit等传统的单元测试框架不同,它们通常是在开发环境中运行。 安装Cactus...

    cactus-1.8.1-bin.zip

    Cactus 1.8.1是一个稳定版本,可能包含性能优化、bug修复以及对新版本Java和Web容器的支持。 在`cactus-1.8.1-bin.zip`这个压缩包中,我们可以期待找到以下内容: 1. **Cactus库**:包括Cactus的核心库和其他必要...

    jakarta-cactus-12-1.7.1.rar

    Jakarta Cactus是Java开发中的一个开源框架,主要用于Web应用程序的服务器端单元测试。这个"jakarta-cactus-12-1.7.1.rar"压缩包文件包含了Cactus框架的1.7.1版本,这是一个针对Jakarta项目第12次发布的重要更新。 ...

    基于Junit的测试组件cactus

    Cactus是一个基于JUnit框架的简单测试框架,用来单元测试服务端Java代码。Cactus框架的主要目标是能够单元测试服务端的使用Servlet对象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等

    cactus-源码.rar

    Cactus与Servlet容器紧密集成,通过拦截Servlet调用来执行测试代码,大大简化了Web应用的测试流程。 二、源码结构分析 Cactus的源码主要包含以下几个部分: 1. **Cactus Core**:这是Cactus的核心模块,实现了与...

    Developing and Unit Testing with Cactus

    Cactus的一个关键优势在于它支持在容器内进行测试的策略,包括进程内和单个JVM实例内的测试。这种策略有助于提高测试的准确性和效率,因为它们更接近实际运行时的条件。这也符合Application Developer单元测试工具的...

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

    它允许开发者在不依赖于Web容器的情况下执行Action和Form对象的测试。 在本项目中,这些工具的组合使用旨在实现以下几个目标: - 使用Ant构建整个应用,包括编译、打包和部署。 - 通过Cactus在服务器环境中对EJB和...

    CACTUS

    CACTUS是一个与字体设计相关的主题。在计算机和图形设计领域,字体是至关重要的元素,它们不仅用于传达信息,还对整体视觉效果产生深远影响。"CACTUS"可能指的是一个特定的字体系列、字体库或者一个与仙人掌主题相关...

    6-Cactus.rar

    标题中的"6-Cactus.rar"很可能是一个压缩文件,通常用于存储多个相关文件或文件夹,以便于传输或保存。RAR是一种流行的压缩格式,由尤里·扎哈罗夫开发,它提供了比ZIP更高的压缩率,同时支持修复损坏的压缩文件,...

    Python-Cactus设计师设计的静态站点生成器

    **Python-Cactus设计师设计的静态站点生成器** Python-Cactus是一款专为设计师打造的静态站点生成器,它基于Python编程语言,并采用了强大的Django模板引擎。Cactus的主要目的是简化静态网站的创建流程,使得设计师...

    Cactus,MVC权限后台加上一个CMS

    Cactus是一个基于.NET框架,尤其是.NET 4.5.2版本的MVC(Model-View-Controller)架构的后台管理系统,结合了权限管理和CMS(内容管理系统)的功能。使用Cactus,开发者可以快速构建具备安全控制和内容管理的Web应用...

    jakarta-cactus-13

    The Cactus project is pleased to announce the release of version 1.7.2. Cactus is a unit testing framework for testing server side java code.

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

    在本文中,我们将深入探讨如何使用一系列技术和工具,如EJB、Struts1.3、Ant、Cactus、DbUnit、JMeter以及StrutsTest,来实现一个完整的测试流程,针对一个基于Java的企业级应用程序进行全面的测试。这些技术在软件...

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

    本项目"使用EJB+Struts1.3+Ant+Cactus+DbUnit+JMeter+StrutsTest实现测试3"正是针对这一目标进行的实践。下面将详细介绍这些技术及其在测试中的应用。 **EJB(Enterprise JavaBeans)** 是Java平台上的企业级组件...

    cactus-report.xsl

    cactus-report.xsl cactus-report.xsl cactus-report.xsl

    Junit基础教程与学习

    四、Cactus 进行容器内测试 Cactus 是一套简单、易于使用的服务器端测试框架,可以使开发人员很轻松的测试服务器端的程序。Cactus 的测试分为三种不同的测试类别:jspTestCase,ServletTestCase,FilterTestCase。 ...

    有向cactus判定的证明

    ### 有向Cactus判定的证明 #### 一、引言 有向Cactus图是一种特殊的有向图,其中每条边至多属于一个简单环。这类图在计算机科学领域有着广泛的应用,尤其是在网络流问题、图论研究等方面。本文旨在通过对有向Cactus...

    Python库 | Cactus-3.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:Cactus-3.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Cactus_1920x1080_50.rar

    标题"Cactus_1920x1080_50.rar"暗示这可能是一个包含高清视频帧序列的压缩文件,其中"1920x1080"指的是视频的分辨率,即1920像素宽乘以1080像素高,这是常见的全高清(FHD)分辨率。"50"可能代表帧率,即每秒显示50...

Global site tag (gtag.js) - Google Analytics