StrutsTestCase介绍

StrutsTestCase配置的常见问题及其多级Action的处理方式 StrutsTestCase的配置的常见问题及其简单的测试用例 阅读详情

StrutsTestCase介绍

作者:孤独萤火虫

1.   概要

StrutsTestCase for JUnitJunit TestCase的扩展,提供基于Struts框架的代码测试装置。StrutsTestCase同时提供Mock 对象方法和Cactus方法用来实际运行Struts ActionServlet,你既可以通过运行servlet引擎来测试,也可以不通过它。因为StrutsTestCase使用ActionServlet控制器来测试你的代码,因此你不仅可以测试Action对象的实现,而且可以测试mappingsfrom beans以及forwards声明。

使用StrutsTestCase不启动servlet容器来测试struts应用程序(容器外测试)也属于Mock对象测试,但是与EasyMock不同的是,EasyMock是提供了创建Mock对象的API,而StrutsTest则是专门负责测试Struts应用程序的Mock对象测试框架。

除了容器外测试,StrutsTest也可以很方便的用容器内的测试。

StrutsTestCase当前的版本是StrutsTest2.1.2,支持Servlet2.22.3的规范,并且支持Struts1.1Cactus1.6.1Junit3.8.1。在这个版本中不支持Struts1.0。如果需要测试struts1.0的应用程序,对应的版本是StrutsTest2.0。可以从http://sourceforge.net/projects/strutstestcase/下载。

2.   使用方法

首先应从StrutsTestCase主页下载该工具,解压后会有一个JAR文件,还有一个例子以及API DOC。编写StrutsTestCase时需将这个JAR文件引入到工程中(和Struts中的JAR文件放在一起),此外由于是对JUnit的扩展,因此还必须将Junit.jar引入到工程中

上面已经介绍过有两种测试方法,下面分别来简单说明:

1)                  MockStrutsTestCaseMock对象测试):通过模拟容器来进行测试。MockStrutsTestCase用一套HttpServlet mock对象在不需要运行Servlet引擎的情况下来模拟容器环境。

2)                  CactusStrutsTestCaseIn-container testing):在真实运行的容器中通过使用Cactus测试框架进行测试。

说明:上述两个类都是对Junit TestCase的扩展。如果要将Mock对象测试方法改为Cactus方法,只需要将我们所定义子类的父类由MockStrutsTestCase改为CactusStrutsTestCase即可,而不需要更改内部代码。

命名规则:对于类的命名没有严格的规范,但个人建议使用Test+要测试的Action名;方法名可以任意取,但注意一点:系统只会自动运行以”test”开头的方法名来进行测试。

下面通过一个我写的一个实例来说明具体使用方法,先来看一个ActionRegisterAction.java)中的代码:

 

package com.firefly;

 

import org.apache.struts.action.*;

import javax.servlet.http.*;

/**

 * @author firefly

 */

public class RegisterAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,

     HttpServletRequest req, HttpServletResponse res){

            RegisterForm rf = (RegisterForm)form;

            //String userName = rf.getUserName();

            String password1 = rf.getPassword1();

            String password2 = rf.getPassword2();

            if(password1.equals(password2)){

               try{

                    return mapping.findForward("success");

                }

                catch(Exception e){

                    return mapping.findForward("failure");

                }

            }

            return mapping.findForward("failure");

        }

 

}

功能很简单,即查看两次输入的密码是否相同,相同则转到success,否则转到failure。下面是测试代码(TestRegisterAction.java):

 

package com.firefly;

import servletunit.struts.*;

/**

 * @author firefly

 */

public class TestRegisterAction extends MockStrutsTestCase{

   

    public void setUp() throws Exception{

        super.setUp();

    }

    public void tearDown() throws Exception{

        super.tearDown();

    }

   

    public TestRegisterAction(String testName){

        super(testName);

    }

   

    public void testSuccessfulLogin(){

        setRequestPathInfo("/register");

        addRequestParameter("userName","hellking");

        addRequestParameter("password1","123");

        addRequestParameter("password2","123");

        actionPerform();

        verifyForward("success");

    }

    public void testFailedLogin(){

        setRequestPathInfo("/register");

        addRequestParameter("userName","hellking");

        addRequestParameter("password1","123");

        addRequestParameter("password2","");

        actionPerform();

        verifyForward("failure");

    }

 

}

说明:

1)      如果overridesetUp()tearDown()方法,那么必须在第一行显示调用其父类的相应方法,原因很简单,父类在这两个方法中定义了很多内容来保证程序能够按照既定规则执行,所以我们必须加载它。

2)      在测试方法中,我们需要做的第一件事是通知Struts在这个测试中要使用哪一个映射(mapping),我们指定一个和Struts mapping相关联的路径,这与Struts标签库方法中使用的机制相同。

3)      我们接下来要做的是通过request对象传递form bean属性,这同样与Struts所做的相同。

4)      该到运行action的时候了,我们通过使用actionPerform()方法来完成该任务。

5)      最后要检验的是程序运行结果是否和我们所预期的一样,通过调用verifyForward()方法来进行确认。这里还有可能用到其他一些方法,如:assertEquals()assertNull()verifyNoActionErrors()verifyActionErrors()等等。

6)      即使你在test方法中不进行任何测试,系统也不会提示任何错误(这个与Actionexecute()方法必须返回ActionMapping有所不同),显示的测试结果仍然为成功。你可以在一个test方法中写多个测试,但个人不建议这样使用,这会给方法的命名及程序的结构带来很大的困扰。此外,test方法中遇到测试失败后便会立即返回,而不是继续向下运行(这和and语句颇有相似之处)。

7)      主要函数和作用:

setRequestPathInfo,设置request的请求

addRequestParameter,将参数和对应的值加入request

 actionPerform,执行这个请求

verifyForward,验证forward的名字是否正确

verifyForwardPath,验证forwardpath是否正确

verifyNoActionErrors,验证在action执行过程中没有ActionError产生

verifyActionErrors,验证在action执行过程中产生的ActionError集合的内容

详细请查看API  DOC

 

下面为一些参考网站:

StrutsTestCase主页:http://sourceforge.net/projects/strutstestcase/

API  DOChttp://strutstestcase.sourceforge.net/api/index.html

 

如果需要进一步了解Mock ObjectsCactus测试框架,可以去其官方网站:

Mock Objectshttp://www.mockobjects.com/

Cactushttp://jakarta.apache.org/cactus/index.html

MockStrutsTestCase测试action测试 MockStrutsTestCase测试struts框架的action 立即下载

相关推荐

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(STC)框架,解释如何用模拟方式和 Cactus 方式测试示例应用程序。作者 Sunil Patil 是 IBM 印度软件试验室的开发人员,他首先将介绍 STC,然后会带您遍历设置使用 STC 和测试各种 Struts 特性的环境的过程。还将演示如何在 STC 中同时使用 Cactus 和模拟方式。注意:本文要求读者熟悉 Struts 框架。StrutsT

飞鱼软件工作室 1225

StrutsTestCase工程例子

StrutsTestCase工程例子,很实用!

struts1的测试(MockStrutsTestCase类)

import java.io.File; import servletunit.struts.MockStrutsTestCase; public class TestLogonAction extends MockStrutsTestCase { protected void setUp() throws Exception { super.setUp(); setCon...

web开发自学 381

基于Mock对象和AOP技术进行Struts应用程序单元测试开发

一、引言 测试驱动开发在减少开发努力的同时也改进了软件的开发质量。单元测试,作为一整套测试策略的基础,必须是全面的,且要求易于建立和执行迅速。然而, 对执行环境和被测试类外部代码的依赖性使我们实现这些目标变得更为复杂。例如,把应用程序发布到容器将显著地延长代码和测试的周期;而对其它类的依赖性通 常也会导致测试的建立更加复杂和测试运行速度更为缓慢。 集成两个流行的测试框架(StrutsTes...

weixin_33724659的博客 130

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

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

gongyifeng的专栏 639

Struts 测试

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

dananhai381的专栏 964

使用StrutsTestCase测试StrutsAction

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

616

基于Junit2.0的StrutsTestCase应用

基于Junit2.0的StrutsTestCase应用        在我的前一篇文档《测试驱动的开发是重要的》中说过我要写一些测试框架应用方面的文档,今天我要实现我的诺言之一,这篇文章是介绍StrutsTeseCase的,熟悉并采用struts的开发员曾经一定有过这样一个困扰:我的action如何进行测试?(不是说要“测试先行”么?),如果没有一个可行的测试框架那我的struts环境去哪

隐隐约约出现平常人诞生的故乡 1659

StrutsTestCase 初体验

<br />StrutsTestCase测试Struts的基于junit的框架。<br />到目前为止,并不是所有的Struts框架的各个版本都支持。至少到目前,它根本不支持Struts2。<br />关于StrutsTestCase介绍就不多说了,有兴趣看看官网有很详细的介绍。<br /> <br />本章文章主要针对像我一样,第一次接触StrutsTestCase,并且有一种习惯,就是先运行示例的朋友们。<br /> <br />需要注意的第三方jar包:<br />junit3.8.2 strut

路在转角处 1502

StrutsTestCase实战

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

biran1980的专栏 907

STRUTS测试框架STRUTSTESTCASE实战

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

没有最好,只有更好 176

关于测试框架junit dbunit strutstestcase

<br />strutstestcase目前官方网站上标识只支持struts1.2 1.3,对于struts2只字未提,因为暂时还没有研究struts1,所以。。。<br /> <br />暂时 抛弃 放弃<br /> <br />dbunit<br />一个对数据层进行测试的框架<br /> <br />junit<br />常用语单元测试

路在转角处 755

StrutsTestCase入门

StrutsTestCase测试方法1.下载StrutsTestCase的包,可以从sf上获得;http://sourceforge.net/project/showfiles.php?group_id=39190我的测试环境eclispe 3.1.2 + myeclipse 4.1.0 +tomcat 5.5 + struts 1.2  + StrutsTestCase 2.1.3可能会出现的错

飞鱼软件工作室 2219

Struts测试框架StrutsTestCase实战

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

Bob@CSDN 816

[Struts]使用StrutsTestCaseAction进行单元测试简介

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

diaozhuo4700的博客 276
下一篇: 《Thinking in Java》学习笔记(一)——对象导论
fireflyqt
博客等级 码龄22年 1粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值