用StrutsTestCase 测试 struts

  一、Struts测试概述
  
  一个具有良好系统架构的J2EE应用程序至少有三层组成,即表现层,商业层和系统
  
  集成层(包括数据存取以及和其他系统集成),目前,Struts是应用比较广泛,实现MVC2模式应用于表现层的一种技术. 在这里面,Struts Action主要用来完成一些简单的数据校验,转换,以及流程转发控制(注重:这里流程不是业务规则). 因此在对整个应用程序进行测试时,我们同时也要测试Struts Action.
  
  但是,测试Struts Action相对测试简单的JavaBean是比较困难,因为Struts是运行在Web服务器中, 因此要测试Struts Action就必须发布应用程序然后才能测试. 我们想象一下,对于一个拥有上千个jsp page和数百甚至数千Java Classes的大规模应用程序,要把他们发布到诸如Weblogic之类的应用服务器再测试,需要多少的时间和硬件资源? 所以这种模式的测试是非常费时费力的.
  
  所以,假如有一种办法能够不用发布应用程序,不需要Web服务器就能象测试普通Java Class一样测试Struts Action,那就能极大地加强Struts的可测试性能,使应用程序测试更为轻易,简单快速. 现在这个工具来了,这就是StrutsTestCase.
  
  二、StrutsTestCase 概述
  
  StrutsTestCase 是一个功能强大且轻易使用的Struts Action开源测试工具,它本身就是在大名鼎鼎的JUnit基础上发展起来的。因此通过和JUnit结合使用能极大加强应用程序的测试并加快应用程序的开发.
  
  StrutsTestCase提供了两者测试方式,模拟方式和容器测试方式. 所谓模拟方式就是有StrutsTestCase本身来模拟Web服务器. 而容器测试方式则需要Web服务器. 本文要讨论的是前者,原因很简单,不需要Web服务器就能象测试普通的Java Class一样测试Struts Action.
  
  三、预备StrutsTestCase和Struts Action/ActionForm/Config
  
  StrutsTestCase是一个开源工具,可以到http://strutstestcase.sourceforge.net下载. 目前最新版本是2.1.3,
  
  假如你使用Servlet2.3就下载StrutsTestCase213-2.3.jar,使用Servlet2.4的就下载StrutsTestCase213-2.4.jar.
  
  另外StrutsTestCase本身就是从JUnit继续的,所以你还需要下载JUnit3.8.1.
  
  在本文中,我们用一个简单的例子来做测试. 假设我们有一张表Hotline(country varchar2(50),pno varchar2(50)),
  
  我们要做的是根据输入条件从这张表检索相应的记录.检索条件是country.
  
  Value Object:
  package sample;
  public class HotlineDTO implements Serializable{
  private String country = "";
  private String pno = "";
  /**
  * Method HotlineActionForm
  *
  *
  */
  public HotlineDTO () {
  super();
  }
  public void setCountry(String country) {
  this.country = country;
  }
  public void setPno(String pno) {
  this.pno = pno;
  }
  public String getCountry() {
  return (this.country);
  }
  public String getPno() {
  return (this.pno);
  }
  }
  
  ActionForm:
  package sample;
  import org.apache.struts.action.ActionForm;
  public class HotlineActionForm extends ActionForm{
  private String country = "";
  private String pno = "";
  /**
  * Method HotlineActionForm
  *
  *
  */
  public HotlineActionForm() {
  super();
  }
  public void setCountry(String country) {
  this.country = country;
  }
  public void setPno(String pno) {
  this.pno = pno;
  }
  public String getCountry() {
  return (this.country);
  }
  public String getPno() {
  return (this.pno);
  }
  }
  
  Action Class:
  public class SearchHotlineAction extends Action {
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
  HttpServletResponse response) throws Exception {
  String target = "";
  try{
  //调用HotlineDAO检索hotline
  String country=((HotlineActionForm)form).getCountry();
  List hotlineList = HotlineDAO.getHotlineList(country);
  if(hotlineList!=null && hotlineList.size()>0){
  request.setAttribute("hotlineList",hotlineList);
  target = "hotlineList";
  }else{
  target = "notfound";
  }
  }catch(Exception ex){
  ....
  }
  }
  
  Struts Config:
  <struts-config>
  <form-beans>
  <form-bean name="hotlineActionForm" type="sample.HotlineActionForm" />
  .......  </form-beans> <action-mappings>
  <action path="/SearchHotline"
  name="hotlineActionForm"
  type="sample.SearchHotlineAction "
  scope="request"
  validate="false">
  <forward name="hotlineList" path="/hotlineList.jsp"/>
  <forward name="notfound" path="/searchHotline.jsp"/>
  </action>
  .....
  <action-mappings>
  ........ <struts-config>
  
  四、初试StrutsTestCase
  
  当采用模拟方式时,所有的StrutsTestCase测试Class都是从MockStrutsTestCase继续下来的.
  
  下面我们就创建一个最简单的测试Class.
  public class SearchHotlineAction extends MockStrutsTestCase {
  public void setUp()throws Exception{
  }
  public void tearDown()throws Exception{
  }
  public void testSearchHotline() throws Exception{
  setRequestPathInfo("/SearchHotline.do");
  addRequestParameter("country", "CN");
  actionPerform();
  }
  }
  
  上面的Class相信用过JUnit的朋友都很熟悉.
  
  好了,一个简单的测试例子就完成了,假如你用的是Eclipse就选择Run-Run...-JUnit-New就可以直接运行.不需要发布你的程序,不需要任何的Web服务器支持,就可以测试Struts Action,这就是StrutsTestCase带来的好处.下面简单地介绍一下它是怎么工作的.
  
  在上面的例子中,我们调用setRequestPathInfo()告诉StrutsTestCase我们要模拟JSP调用SearchHotline.do这个Action,并且调用addRequestParameter()增加了一个参数country.最后调用actionPerform()运行.
  
  看到这里,大家发现一个问题没有? 在上面Action的源代码里我们是通过
  
  String country=((HotlineActionForm)form).getCountry();
  
  也就是ActionForm来取得输入的参数值,可我们在testSearchHotline()方法里并没有设置ActionForm?
  
  那么它是怎么出来的呢? 其实大家假如熟悉Struts的运行流程的话就知道,JSP接受用户的输入并发请求时都是类似这样的http://hostname/servletName?param1=value1¶m2=value2. 只是Struts接受到这些参数后再根据Struts Config里的Action和ActionForm的映射把他们转为ActionForm后传给Action的.
  
  在上面的例子,我们只是简单地运行了Action,那么Action是否正确执行以及返回的结果是不是我们想要的呢?
  
  我们继续完善一下testSearchHotline()这个Method.
  
  public void testSearchHotline() throws Exception{
  setRequestPathInfo("/SearchHotline.do");
  addRequestParameter("country", "CN");
  actionPerform();
  verifyNoActionErrors();
  verifyForward("hotlineList");
  assertNotNull(request.getAttribute("hotlineList"));
  List hotlineList = (List) request.getAttribute("hotlineList");
  for (Iterator it = hotlineList.iterator();it.hasNext();){
  ....
  }
  }
  
  我们在actionPerform()后增加了几行语句来断定Struts Action是否正确执行.
  
  verifyNoActionErrors() -- 判定Action里没有任何的Action;
  verifyForward("hotlineList") -- 判定Action确实转发到hotlineList;
  assertNotNull(request.getAttribute("hotlineList")) -- 判定Action确实返回了hotlineList并且不为空
  
  到这里,我们已经基本上讨论完了StrutsTestCase的核心部分. 从头到尾,我们没有发布应用程序,也不需要Web服务器,对我们来讲,Struts Action就象普通的Java Class一样轻易调试测试.这就是StrutsTestCase给我们带来的方便.
  
  五、深入StrutsTestCase
  
  除了以上我们用到的几个断定和校验方法外,StrutsTestCase还提供了其他几个方法便于我们测试Struts Action. 下面我一一讲述,具体的大家可以参考文档.
  
  verifyActionErrors/Messages -- 校验ActionActionServlet controller 是否发送了ActionError或ActionMessage.  参数为ActionError/Message Key
  verifyNoActionErrors/Messages --校验ActionActionServlet controller 没有发送ActionError或ActionMessage
  VerifyForward -- 校验Action是否正确转发到指定的ActionForward.
  VerifyForwardPath -- 校验Action是否正确转发到指定的URL
  verifyInputForward -- 校验Action是否转发到Action Mapping里的input属性
  verifyTilesForward/verifyInputTilesForward--和以上类似,应用程序使用到tiles时用的
  
  六、关于Web.XML和Struts-Config.xml
  
  缺省情况下,StrutsTestCase认为你的Web.xml和struts-config.xml的路径分别是:
  /WEB-INF/web.xml和/WEB-INF/struts-config.xml
  
  1. 假如你的web.xml/struts-config.xml的路径是d:/app/web/WEB-INF/web.xml(struts-config.xml)的话,就需要把d:/app/web加到classpath.
  
  2. 假如你的struts config是strust-config-module.xml,那么必须调用setConfigFile()设置你的struts config文件
  
  

StrutsTestCase工程例子 StrutsTestCase工程例子,很实用! 立即下载

相关推荐

strutsTestCase所需要用到的jar

strutsTestCase所需要用到的jar org.springframework.core-3.1.2.RELEASE.jar spring-test.jar struts2-junit-plugin-2.3.16.3.jar xmlbeans-2.3.0.jar xmlpull-1.1.3.1.jar xstream-1.4.2.jar xwork-core-2.3.16.3.jar

网上收集资料(学习StrutsTestCase)转载版

 阅读提要 StrutsTestCase是一个强有力的易于使用的针对Struts行为的测试框架。StrutsTestCase,并与传统型JUnit测试相结合,将会带给你一个相当高的测试覆盖率并提高你的产品的可靠性。  一、引言  StrutsTestCase是一个用于测试Struts行为的基于Junit的测试框架。如果你使用Struts,那么你会注意到它可以提供给你一种容易而有效的方式来测试你的应

gongyifeng的专栏 640

struts2测试案例

初学者struts2测试案例,对于刚接触struts2的同学会有帮助

Struts 测试

StrutsTestCase介绍     StrutsTestCase工程提供了一种在JUnit框架下测试struts action的灵活、便利的方法。你可以通过设置请求参数,检查在Action被调用后的输出请求或Session状态这种方式对Struts Action做白盒测试

dananhai381的专栏 965

知识图谱初步学习(一)——本体+Protege新手学习

文章目录前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法一、protege简介二、软件使用步骤1.安装2.使用三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中,首先就是要了解什么是本体(ontology)。 1.本体概念 本体的概念最初源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体是可以在语义的层次上来对知识进行描述,可以看做是某一个领域知识的通用模型。 本体是从客观世界中抽象出来

qq_43654669的博客 3万+

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行

dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发

Done___的博客 4344

Struts测试框架StrutsTestCase实战

Bob1228的专栏 246

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

[Struts]使用StrutsTestCase对Action进行单元测试简介

目前,测试驱动开发正变得越来越流行,由于“存在的就是合理的”,这种开发方式必然有其优越之处。作为一个小小程序员,对新鲜技术的追求是工作的重要动力,相信大家都有同感吧。 测试驱动开发是极限编程(XP)的重要组成部分,从字面上就可以看出,它是先有测试再有代码的。这听起来似乎有点奇怪,实际上,可以把测试用例当作需求,程序员的工作就是写出满足这种需求的代码,即让这些测试都能够通过。在刚刚写好测...

diaozhuo4700的博客 283

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测_2026-02-26

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测作为一名编程小白,我目前正在学习编译和运行 Qt 框架,也在逐步摸索开发环境的配置方法,目标是打造一款属于自己的个人效率工具。就在这时,我挖到了一个国家级硬核福利:国家超算互联网核心节点开放免费试运行!哪怕是零基础如我,也能申领到 100 卡时异构加速卡算力,关键是——2 月底前申请更稳妥,早占位早使用。

qq_58517981的博客 2097

【RT-DETR有效改进】轻量级网络ShuffleNetV2(附代码+修改教程)

从今天开始正式开始更新RT-DETR剑指论文专栏,本专栏的内容会迅速铺开,在短期呢大量更新,价格也会乘阶梯性上涨,所以想要和我一起学习RT-DETR改进,可以在前期直接关注,本文专栏旨在打造全网最好的RT-DETR专栏为想要发论文的家进行服务。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR​​。

Snu77的博客 1993

利用StrutsTestCase测试Struts应用程序

利用StrutsTestCase测试Struts应用程序作者:叶枫版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明作者:叶枫(http://blog.matrix.org.cn/page/叶枫)原文:[http://www.matrix.org.cn/resource/article/44/44008_StrutsTestCase.html]http://ww

javachannel的专栏 1138

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

天天酷科研的博客 3188

使用StrutsTestCase测试Struts的Action类

                                          使用StrutsTestCase测试Struts的Action类 一.前言对于OPEADP这个项目,UT阶段本来是打算使用HttpUnit来测试相关的Action类。经过调查,发现使用StrutsTestCase更适合,因为HttpUnit要求所测试的程序先运行起来,而StrutsTestCase可以脱

620

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3149

【异常】OpenClaw总Token超限400报错400 Total tokens of image and text exceed max message tokens. Request id:

摘要: 多模态大模型调用中,图文总Token超限导致的400报错是常见问题。本文分析了该报错的触发原因(文本+图片Token总和超出接口限额),并从技术层面解释了多模态Token的计数规则。解决方案分为三个层次:1)紧急修复(精简文本、压缩图片、拆分请求);2)标准化根治(预校验Token、图片预处理、限额适配);3)进阶兜底(分块处理、模型升级、容错机制)。通过前置管控与源头优化,可有效解决并预防此类问题,提升业务稳定性。

奶爸的编程之路,也就一周冷个三天 831

STRUTS测试框架STRUTSTESTCASE实战

  阅读提要 StrutsTestCase是一个强有力的易于使用的针对Struts行为的测试框架。StrutsTestCase,并与传统型JUnit测试相结合,将会带给你一个相当高的测试覆盖率并提高你的产品的可靠性。   一、引言   StrutsTestCase是一个用于测试Struts行为的基于Junit的测试框架。如果你使用Struts,那么你会注意到它可以提供给你一种容易而有效...

没有最好,只有更好 178

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Struts行为测试框架StrutsTestCase实战

  一、引言  StrutsTestCase是一个用于测试Struts行为的基于Junit的测试框架。如果你使用Struts,那么你会注意到它可以提供给你一种容易而有效的方式来测试你的应用程序的Struts行为类。  典型的J2EE应用程序都是分层构建的,如图1所示。  ·DAO层封装了数据库存取。Hibernate映射和对象类,Hibernate查询,实体EJBs,或一些其它的实体-关系持续性技

axiang0335的专栏 671

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

StrutsTestCase测试Struts应用程序

本文介绍了一种利用开源工具测试Struts Action的办法. 利用这种办法,开发人员可以不需要发布Struts应用程序,不需要Web服务器就可以象测试普通Java Class一样测试Struts Action,从而能够极大地提高Struts的可测试性能,加快Struts程序的开发速度   一、Struts测试概述  一个具有良好系统架构的J2EE应用程序至少有三层组成,即表现层,商业层

hjm4702192的专栏 899

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

StrutsTestCase测试Maven构建的Spring+Hibernate+Struts

用maven构建了一个simple java web application。目录结构都按照maven默认定义的设置。   由于ApplicationContext.xml 存放着resources目录下,引起了很多spring配置文件找不到的问题。这些今天就不说了。先说今天的事。   我们在用StrutsTestCase对Struts进行单元测试的时候出现过ApplicationContext....

tide2046 256

用 Slidev 将 Markdown 变成开发者友好的幻灯片

现代开发者制作演示文稿时,常遇到排版耗时、代码样式混乱、版本管理困难等痛点。Markdown 作为轻量级标记语言,以其简洁和可版本控制特性,正逐渐成为技术内容创作的主流格式。基于 Markdown 与 Vue 3 构建的演示工具,能够将文本内容自动渲染为幻灯片,并支持代码高亮、组件复用、演讲者模式等功能。这一方式适用于技术分享、项目汇报、开源路演等场景,能显著提升开发者的内容生产效率。本文围绕 Slidev 这款工具,介绍其安装配置、分页语法、主题布局、代码高亮、导出部署等实操要点,帮助你快速上手。

weixin_34161029的博客 240
上一篇: WebBrowser.ExecWB 总结
下一篇: myeclise 使用junit 测试 struts问题
friping
博客等级 码龄20年 0粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值