知识大全 用StrutsTestCase测试Struts应用程序

Posted

篇首语:成功由大量的失误铸就。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用StrutsTestCase测试Struts应用程序相关的知识,希望对你有一定的参考价值。

用StrutsTestCase测试Struts应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 Struts测试概述    一个具有良好系统架构的J EE应用程序至少有三层组成 即表现层 商业层和系统    集成层(包括数据存取以及和其他系统集成) 目前 Struts是应用比较广泛 实现MVC 模式应用于表现层的一种技术 在这里面 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是一个开源工具 可以到下载 目前最新版本是     如果你使用Servlet 就下载StrutsTestCase jar 使用Servlet 的就下载StrutsTestCase jar     另外StrutsTestCase本身就是从JUnit继承的 所以你还需要下载JUnit     在本文中 我们用一个简单的例子来做测试 假设我们有一张表Hotline(country varchar ( ) pno varchar ( ))     我们要做的是根据输入条件从这张表检索相应的记录 检索条件是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)   untry = country;    public void setPno(String pno)   this pno = pno;    public String getCountry()   return (untry);    public String getPno()   return (this pno);        ActionForm:  package sample;  import 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)   untry = country;    public void setPno(String pno)   this pno = pno;    public String getCountry()   return (untry);    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()> )  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接受用户的输入并发请求时都是类似这样//hostname/servletName?param =value &param =value 只是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 = erator();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     假如你的web xml/struts config xml的路径是d:/app/web/WEB INF/web xml(struts config xml)的话 就需要把d:/app/web加到classpath      假如你的struts config是strust config module xml 那么必须调用setConfigFile()设置你的struts config文件     七 结束语    J EE应用程序的测试在开发过程中占有相当重要的位置 利用StrutsTestCase能极大方便你测试基于Struts的应用程序 cha138/Article/program/Java/ky/201311/28938

相关参考

知识大全 进行Struts应用程序单元测试开发

进行Struts应用程序单元测试开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一引言  测

知识大全 struts2迭代不同对象的测试

  在平时使用s:iterator这个迭代标签一般我们都是把一个相同类型的多个对象放入一个集合当中那么是否可以放入不相同的对象来迭代呢?日常工作有时候可能是需要这样来简化程序的我今天测试了一下好像完全

知识大全 struts2项目性能调优三步曲(一)

  前一段时间有反映说是一个使用了struts的生产系统的页面显示速度太慢登录后发现确实如此于是进行了一番性能调优的研究和测试  一根据struts官方的性能调优说明进行了一些参数的修改  //str

知识大全 用Struts框架开发Java应用

用Struts框架开发Java应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Struts开

知识大全 用Struts实现模板

用Struts实现模板  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果不用框架来开发一个门户

等电位联结测试内容是什么?

  局部等电位联结安装完毕后,应进行导通性测试,测试用电源可采用空载电压为4~24v的直流或交流电源,测试电流不应小于0.2A,若等电位联结端子板与等电位联结范围内的金属管道等金属体未端之间的电阻不大

等电位联结测试内容是什么?

  局部等电位联结安装完毕后,应进行导通性测试,测试用电源可采用空载电压为4~24v的直流或交流电源,测试电流不应小于0.2A,若等电位联结端子板与等电位联结范围内的金属管道等金属体未端之间的电阻不大

知识大全 用MyEclipse开发第一个Struts程序

Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容

知识大全 用 struts 向数据库中储存图片

  这个例子是通过用Struts的FormFile来写入到MySQL中    用用户通过选一个图片然后按submit就可以存入数据库中    其中先要建立一个表:    createtabletest

知识大全 用Struts建立MVC应用的介绍

用Struts建立MVC应用的介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  .Model和