16.3 测试完整的Struts2运行流程
16.3.1概述
在上面单元测试动作类Action中,基本上是把Struts2的Action类当作一个普通的Java类来进行测试,就没有涉及到Struts2的其他部分,也没有涉及到完整的Struts2的运行流程,比如:拦截器、验证框架、Result等等。
回忆一下Struts2的运行流程图,如果想运行对应的拦截器的话,就不能直接运行Action对象,而是要在ActionProxy对象上下手,这样才能根据struts.xml中的内容,装配上对应的拦截器,并模拟Strus2的真实运行过程。
这也说明,要想测试完整的Struts2的运行流程,就应该在测试中获取到ActionProxy对象,然后通过它来获取ActionInvocation对象,然后运行ActionInvocation对象就可以依次调用:拦截器、Action、Result等组件。
那么在测试中,如何来获取Struts2的ActionProxy对象呢?
Struts2框架给我们设计好了一个测试的父类,在这个类中直接可以根据URL返回对应的ActionProxy对象,所以,只要知道请求的URL就可以开始测试了。
还是用一个具体的示例来做说明,前面学习过验证框架,这里就来测试验证框架的功能是否正确吧,可以通过验证框架返回的提示信息来判断验证框架是否正常运行,当然,如果通过了验证框架的验证,就该执行Action并返回Result了。
好了,接下来就来具体看看如何实现这样的测试。当然,首先需要准备测试环境。
16.3.2准备测试环境内
1:准备要引用的jar包
首先把到我们的工程的WEB-INF\lib包下的jar包,恢复到最开始,也就是struts2-blank-2.1.8.1.war包里面的WEB-INF\lib包下的jar包。
然后到下载的Struts2资源包lib文件夹,也就是\struts-2.1.8.1\lib包下,拷贝以下四个jar包到我们的工程的WEB-INF\lib包下:
- struts2-junit-plugin-2.1.8.1.jar
- spring-core-2.5.6.jar
- spring-test-2.5.6.jar
- commons-logging-1.0.4.jar
2:配置动作类Action
这次测试要通过URL来引用Action,因此,需要在struts.xml中配置相应的Action,示例代码如下:
java代码:
- <package name="helloworld" extends="struts-default">
- <action name="testAction" class="cn.javass.test.TestAction">
- <result>/nosuch.jsp</result>
- <result name="error">/nosuch.jsp</result>
- <result name="input">/nosuch.jsp</result>
- </action>
- </package>
上面的配置和以前的配置是一样的,只是在配置<result>元素的时候,对应的jsp可以暂时还没有。
3:准备验证框架的配置
TestAction代码还保持和上一节中一样,来为这个TestAction准备验证配置文件。该文件的名称为TestAction-validation.xml,放置到TestAction的同包下。
这里只是简单的为user.age属性添加了一个int验证器,要求填入的年龄不小于18岁,示例代码如下:
java代码:
- <validators>
- <field name="user.age">
- <field-validator type="int">
- <param name="min">18</param>
- <message>年龄要大于等于18岁</message>
- </field-validator>
- </field>
- </validators>
和前面学习验证框架的配置方式完全一样。
16.3.3重写测试用例
测试用例的代码和前面可就大不一样了,大致有如下改变:
- 继承的父类不同:原来直接继承junit的TestCase,现在要继承来自struts2-junit-plugin-2.1.8.1.jar包中的StrutsTestCase。
- 不用新建TestAction对象,而是直接用它在struts.xml中配置的相对URL,通过父类的getActionProxy方法获得ActionProxy对象。
- 传入参数的方式不同:原来直接在TestAction对象上赋值就行,现在要新建一个Map,设置Action需要的所有参数,然后把这个Map和ActionContext的parameters关联上。
示例代码如下:
java代码:
- public class TestActionFullTestCase extends StrutsTestCase {
- public void testFull(){
-
- ActionProxy actionProxy = this.getActionProxy("/testAction");
-
- Map<String,Object> map = new HashMap<String, Object>();
- map.put("user.name", "Struts2");
- map.put("user.age", 12);
-
- actionProxy.getInvocation().getInvocationContext().setParameters(map);
-
- try {
-
- String result = actionProxy.execute();
-
- TestAction action = (TestAction) actionProxy.getAction();
-
- assertEquals(0,action.getFieldErrors().size());
- assertEquals("success", result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
16.3.4运行测试用例
现在在测试用例中,我们传入的数据是:name为struts2,年龄是12,运行的结果会是什么呢?
传入的年龄是12,决定了它不能通过验证,验证要求传入的年龄必须不小于18。因此,根本就不会调用execute方法,而是直接返回“input”;同时,应该存在一个字段错误,其信息是“年龄要大于等于18”。
运行结果如下图所示:
图16.5 使用StrutsTestCase的运行结果一
如果传入的年龄数据为22,再次运行测试一下,应该能够通过了,运行结果如下:
图16.6 使用StrutsTestCase的运行结果二
通过上面的示例可以看出,Struts2对于单元测试的支持是非常好的。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/4145.html】
欢迎访问http://sishuok.com获取更多内容
分享到:
相关推荐
这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。
研磨Struts2 高清完整版,请和第一部分一起下载啊
《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...
根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...
研磨Struts2_12859679_高清完整版
6. **运行流程**:理解Struts2的运行流程至关重要。当一个请求到达时,Struts2会解析请求参数,调用相应的Action,执行完Action后,通过Result将结果转发到指定的视图。 7. **Action**:Action是Struts2的核心,它...
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
研磨设计模式(完整版pdf)相信我不用介绍,很多人都在找这本书吧,今天我特意从另外的地方下载到了这本书,发了几十积分。才弄到。为了让大家同时分享这本书的精华。我今天特意上传。注:此电子书较大,我分了3个...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 ...