用Cactus做容器内单元测试

1.cactus 属于jakarta下面的一个子项目,具体下载地址:[url]http://jakarta.apache.org/cactus/index.html[/url]

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

}




[color=red]A:用浏览器的方式进行测试[/color]
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形式,[color=red]在客户端进行转换[/color]。如果想让服务器端直接返回的是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,[color=red]transform的值可以随意[/color],那么服务器端会自己将xml形式的测试结果直接转换成html,然后返回给客户端,就不需要客户端自己做转换了。

[color=red]B:像普通的java application应用的TestCase一样直接在IDE里运行测试[/color]
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.

[color=red]也就是说测试类(FirstServletTest2 )被实例化了2次,在客户端实例化了一次,在服务器端也实例化了一次(ServletTestRedirector通过反射生成测试类的实例)[/color]
实际上[color=red]客户端和服务器端进行的是2次连接[/color],第一次是进行请求运行要测试的方法,第二次是将测试结果返回给客户端,即2次连接。[color=red]只有服务器端的session是有值的,客户端的session是没有值的。[/color]
10、深入探究Cactus与HttpUnit:Web应用测试的利器 本文深入探讨了Cactus和HttpUnit在Web应用测试中的重要作用。Cactus适用于服务器端代码的单元/集成测试,提供对J2EE容器内部机制的访问;而HttpUnit则用于功能测试,通过模拟浏览器行为验证Web应用的响应和交互。文章详细介绍了两者的功能、使用方法以及对比分析,并提供了实际测试案例和高级应用场景。通过合理选择和组合使用这两个工具,开发者可以有效提升Web应用的质量与稳定性。 阅读详情

相关推荐

9、深入探究J2EE组件测试:JUnit、Cactus与实际案例应用

本文深入探讨了JUnit和Cactus在J2EE组件测试中的应用,通过实际案例展示了如何利用这些工具进行高效的测试。文章详细介绍了JUnit的基础与自动化测试功能,Cactus框架的容器内测试机制,以及隔离测试与上下文测试的对比。同时,结合具体代码示例,讲解了如何使用Cactus测试Servlet、过滤器、JSP自定义标签等J2EE组件,并提供了完整的测试流程和优化建议。最后通过案例研究展示了测试如何提升代码质量与可维护性,为J2EE开发者提供了全面的测试解决方案。

julia4scientist的博客 82

Apache jakarta 各项目主要用途及简单说明

Apache jakarta 各项目主要用途及简单说明 (1) 共享函数库, 工具集及通用 API◎BCEL - 这是用来分析你的 java code 变成 class 的情形, 可以通过此共享函数库来了解 JVM 运作模式◎BSF - 这是一组提供 java 应用程序 (application) 去使用 Scripting language 的工具◎Commons - 这里有一些子项目是建立

straggle的专栏 1943

(赛事-2022)[re:Invent 2018]-002:通过分析log多次迭代优化奖励函数后- 最快7.6s / 圈

Deepracer training 流程

Rainbow 4711

apache工程jakarta(雅加达)家族介绍

Apache Ant Project Ant 众所周知,Ant(蚂蚁)是一套基于java的程序打造工具。Apache Avalon Project (阿瓦隆)Avalon Avalon(阿瓦隆,凯尔特族传说中的西方乐土岛,据说亚瑟王及其部下死后尸体被移往该岛)是一套面向组件的编程工程 Apache Cocoon Project Cocoon 2.1 Cocoon(科孔,茧) ,是一套XML框架,它

jlusdy的学习园地 1937

Abaqus 导出单元刚度矩阵和全局刚度矩阵

Abaqus 导出单元刚度矩阵和全局刚度矩阵

科技芯风 1万+

倾向得分匹配的stata命令_政策评估方法引荐|广义倾向得分匹配(GPSM)

和大家分享一下最近学习的进展,在痛苦读完stata journal和练习OA程序,已经可以基本完成广义倾向得分的估计了,在国内这一方法还没有形成广泛运用,因此学习资源也是有点稀缺的,在文章最后给各位提供数据和代码以供练习。有问题可以随时文末留言或者联系我哦。人文社会科学中一般无法在实验室中控制样本个体的特征,我们一般采用“准自然实验”的研究路径,也就是不随机安排样本接受处理与否。但放弃随机分组假定...

weixin_39550258的博客 1万+

Cactus实例讲解

Cactus简介. 简介 Cactus实现了对JUnit测试框架的无缝扩展,可以方便地测试服务端应用程序。Cactus可以在下面几种情况下使用: 测试Servlet以及任何使用了像HttpServletRequest,HttpServletResponse,……这样的对象的代码。使用ServletTestCase。 测试Filter以及任何使用了像FilterCo

飞鱼软件工作室 1026

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

Missing Cactus property [cactus.contextURL]

Missing Cactus property [cactus.contextURL]后来发现少了一个文件cactus.properties,内容如下:cactus.contextURL=http://localhost:8080/Cactuscactus.servletRedirectorName=ServletRedirector. 

spiritleo的专栏 1017

RockChip Android14 修改LCD背光最大值

在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。

qq_34968572的博客 631

paddlehub无法安装,安装报错【Bug完美解决】

paddlehub无法安装,安装报错【Bug完美解决】 我们正在进行一个基于Python的项目开发,该项目需要集成PaddleHub,以利用其丰富的深度学习模型和工具。PaddleHub提供了一种简便的方式来使用预训练模型,以加速开发过程并提高模型效果。 现在paddlehub安装出现问题了,本文彻底解决paddlehub无法安装的问题。

一键难忘的博客 3388

JUnit与Cactus深度解析:从单元测试到容器内测试的完整实践

单元测试是软件质量保障的基石,它通过隔离验证单个代码单元的行为来确保逻辑正确性。JUnit作为Java领域最主流的单元测试框架,其核心机制包括测试生命周期管理、参数化测试和扩展模型,这些特性共同支撑了高效、可维护的测试代码编写。在Web开发场景中,传统的单元测试难以覆盖Servlet、Filter等依赖容器的组件,这时集成测试显得尤为重要。Cactus框架提出的“容器内测试”思想,通过让测试代码在真实Servlet容器内部执行,为Web组件测试提供了经典解决方案。虽然现代Spring Boot Test等框

weixin_30336061的博客 332

手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制

摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。

MHD0815的博客 140

ant+cactus+tomcat5.5容器内单元测试简明手册

一、下载并解压缩cactus下载地址为http://apache.freelamp.com/jakarta/cactus/binaries/jakarta-cactus-12-1.7.1.zip。将cactus的lib目录下的c...

cqwf95925的博客 109

DeepSeek如何构建可扩展的 AI 驱动交易系统,基于 MetaTrader 5 与 Python 利用先进的数据处理、机器学习和容器化部署来优化算法交易。

MT5 Python API 架构设计分为三层:通信层:利用异步消息传递(例如 ZeroMQ 或标准套接字编程)支持每秒数万个数据请求。转换层: C++ 动态库有效地将 MT5 命令转换为 Python 对象(反之亦然),从而优化速度和内存使用率。接口层:提供Pythonic API,封装了所有终端功能,包括:1)实时价格订阅(滴答或秒级更新)2)历史数据检索(从M1到更高的时间范围)3)订单流监控(交易详情和市场深度)4)策略执行引擎(用于算法交易)

iCloudEnd的博客 1382

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JUnit学习笔记11---用Cactus进行容器内测试

In-container testing with Cactus                        Good design at good times.Make it run,make it run right.----Kent Beck 本章内容: 对组件进行单元测试时使用mock objects的缺点介绍使用Cactus进行容器内测试Cactus的工作原理

pan-zy的专栏 1272

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

单元测试 之 Cactus

Cactus is a simple test framework for unit testing server-side java code (Servlets, EJBs, Tag Libs, Filters, ...). The intent of Cactus is to lower the ...

weixin_30799995的博客 204

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Any Substitute Of Cactus? How To Use Cactus?

Cactus has retired for some reason, however, I haven't found any competing substitute that could finish the same mission better. Inforseeable future, I would choose Cactus anyway for server-side in-co

Derek_Zhang_的专栏 762

java 单元测试总结_给servlet写单元测试的总结

给servlet写单元测试的总结收藏servlet的测试一般来说需要容器的支持,不是像通常的java类的junit测试一样简单,下面通过对HelloWorld代码的测试阐述了几种servlet测试方法。被测试的HelloWorld类的代码如下:/*** 被测试的servlet*/import java.io.IOException;import javax.servlet.http.HttpSer...

weixin_39940913的博客 826

Cactus工作原理

Cactus 是Jakarta的子项目之一,是对JUnit的一个扩展。Catus是Java EE容器内测试的事实标准。 Cactus是针对集成单元测试的开源框架。可以在容器内对JAVA EE服务器端组件(如JSP,Servlet,EJB,数据库等)进行细粒度的单元测试。 Cactus测试的生命周期 Cactus测试会创建两个TestCase,一个在客户端,另一个在服务...

our651的专栏 251

Cactus学习历程

项目描述 Cactus是一个对服务器端Java代码(Servlet,EJBs,Tag Libs, Filters,....)进行单元测试的简单的测试框架。 Cactus的目标是降低编写服务器代码单元测试的成本。它使用并扩展了Junit。 Cactus实现了in-container策略,意味着测试是运行在容器内的。 Cactus系统由一些组件组成: Cactus框架:...

niqinwen520的博客 443

IBatis.Net常用的查询方式

项目描述Cactus是一个对服务器端Java代码(Servlet,EJBs,Tag Libs, Filters,....)进行单元测试的简单的测试框架。Cactus的目标是降低编写服务器代码单元测试的成本。它使用并扩展了Junit。 Cactus实现了in-container策略,意味着测试是运行在容器内的。 Cactus系统由一

zhwbwelcome的专栏 545

JUnit in Action 笔记

1、JUnit 2、测试策略 2.1 用stub进行粗粒度测试 2.2 用mock objects 进行孤立测试 2.3 使用cactus进行容器内测试 3、测试组件 3.1 对servlet 和 filter 进行单元测试 3.2 对JSP和taglib 进行单元测试 3.3 对数据库应用程序进行单元测试 3.4 对EJB进行单元测试 测试相关开源...

Nick_WXY的专栏 254

JBOSS发布JSF测试工具-JSFUnit

JBOSS发布JSF测试工具-JSFUnit版本:1.0JSFUnit是开源社区贡献的一个用于测试JSF应用程序的测试工具,基于Cactus和JUnit。JSFUnit提供了三种不同的测试工具:1)容器内的测试框架这用于测试客户端和服务器端。测试处理的范围从单个类的细致测试到运行JSF应用程序的完全整合测试。2)用于JSF静态分析测试的框架这允许你测试你的JSF配置,以致于可以在早期发现配置问

chszs的专栏 3142
上一篇: Failed to install Tomcat6 service(Tomcat6安装失败解决方法)
下一篇: Jetty简单介绍
ttitfly
博客等级 码龄12年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值