1.1StrutsTestCase(STC)单元测试框架在单元测试中的应用技术
1.1.1StrutsTestCase相关的应用技术概述
1、StrutsTestCase(STC)框架---StrutsTestCase(STC)框架:专门负责测试Strut应用程序的测试框架
(1)它是一个开源框架
StrutsTestCase(sourceforge/)是一个开源框架并且是Junit TestCase 类的扩展,提供基于Struts框架的代码测试。
(2)StrtusTest是JUnit的扩展
使用它,不需要启动Servlet容器就可以方便的测试Struts应用程序(容器外测试)。
2、如何测试Struts 中Action
(1)MVC中的各个层
由于一个完整的基于Struts的Web应用系统是MVC架构的,因此应该有表示层、控制层和业务处理层。
(2)各个层中的组件的测试方法
而对表示层我们可以采用前面的Cactus技术来测试各个JSP页面的正确性,对业务处理层由于为一般的JavaBean,当然我们可以采用普通的Junit技术来测试,但对于控制层,在S t r u t s中为A c t i o n类,那我们又应该怎样进行测试它?(3)Action类在测试过程中的复杂性
因为测试Struts Action与测试相对简单的JavaBean是比较困难,因为Struts是运行在Web服务器中, 因此要测试Struts Action就必须发布应用程序然后才能测试。
所以,如果有一种办法能够不用发布应用程序,不需要Web服务器就能象测试普通Java Class一样测试Struts Action。那就能极大地加强Struts的可测试性能,使应用程序测试更为容易、简单快速。
现在这个工具来了,这就是StrutsTestCase。
3、主要的功能
这个框架允许我们在以下方面进行测试:
(1)在 ActionForm 类中的验证逻辑(validate() 方法)。
(2)在 Action 类中的业务逻辑(execute() 方法)。
(3)动作转发(Action Forwards)。
(4)转发 JSP。
4、为什么要提供StrutsTestCase(STC)框架
(1)一个Action类的示例代码
import org.apache.struts.action.*;
import javax.servlet.http.*;
public class LoginAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,  HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException{      // …
return mapping.findForward("success");
}
}
(2)标准的JUnit在对上面的Action类进行测试时所面临的问题
JUnit不能测Struts的Action,或者Cactus也只能测Servlet等。因此,为了能够对Struts 的Action类做单元测试,提供了StrutsTestCase(STC)框架。为什么?其原因如下:
●无法在容器外生成Action类在工作过程中一些对象
因为execute(...) 方法确实难以测试。创建 ActionForm 过程正常;但是怎样才能在容器外生成 ActionMapping、HttpServletRequest 和 HttpServletResponse 呢?J2EE 中的大多数对象都可能发生同样的问题;
●很难使用没有容器的普通 JUnit 测试对这些对象
这些对象本来就不是为在容器外运行设计的,因此很难使用没有容器的普通 JUnit 测试对这些对象进行测试。
5、JUnit 、Cactus和StrutsTestCase三者之间的关系
简单来讲,StrutsTestCase 是 Cactus 的扩展,而 Cactus 又是 JUnit 的扩展。通过结合使用这三个项目,即可对大范围的对象(从简单的 JavaBean,到 Servlet,再到Struts 操作)轻松执行单元测试。
6、STC 支持两种测试类型
StrutsTestCase同时提供Mock 对象方法(容器外测试)和Cactus方法(容器内的测
试)。
7、Mock 方法---容器外模拟的方法
(1)模拟真实世界中的 J2EE 对象
在这种方法中,通过模拟容器提供的对象(HttpServletRequest、HttpServletResponse 和 ServletContext)---模拟真实世界中的 J2EE 对象,STC 不用把应用程序部署在应用服务器中,就可以对其进行测试。
(2)需要一个框架
为了在一个没有容器运行的 JUnit 测试中使用这些对象,需要一个框架提供某些J2EE API 的特殊实现。而StrutsTestCase则是这样的框架,此时StrutsTestCase不启动Servlet容器来测试Struts应用程序(容器外测试)
(3)主要的Mock测试工具
目前,在Java阵营中主要的Mock测试工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微软的.Net阵营中主要是Nmock,.NetMock等。
8、Cactus 方法---容器内的测试
(1)一般用于集成测试阶段
这种方法用于集成测试阶段,在这种方法中,应用程序要部署在容器中,所以可以像运行其他 JUnit 测试用例那样运行测试用例。
(2)可以测试Struts中的各种对象
因为StrutsTestCase使用ActionServlet控制器来测试你的代码,因此我们不仅可以测试Action对象的实现,而且可以测试mappings,from beans以及forwards声明。
9、StrutsTestCase中的两个TestCase的基类
(1)MockStrutsTestCase
适用于HttpServlet的Mock对象以模拟容器的运行环境,但并需要真正地启动服务器容器
(2)CactusStrutsTestCase
使用Cactus测试框架以测试实际运行在服务器容器中的Struts Web应用中的各种类, 从而可以实现与实际的用户环境相互一致。struts框架是干什么的
它们两者都是从标准的JUnit TestCase类来继承的。
1.1.2StrutsTestCase在项目中的应用示例
1、下载StrutsTestCase包
(1)下载它的网址
输入sourceforge/project/showfiles.php?group_id=39190
(2)解包它的各个类
其中的主要的*.jar包文件为strutstest-2.1.3.jar,并且将其放在classpath的设置中。
(3)API帮助
(4)系统中所提供的测试示例
提供一个针对MockStrutsTestCase 的测试示例程序TestLoginAction.java,以及针对CactusStrutsTestCase 的测试示例程序TestCactusLoginAction.java。
通过阅读该测试示例程序,可以了解其编程方法。
具体可以通过阅读其readme文件中的内容来了解执行该示例的环境和要求等

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。