快速业务通道

进行Struts应用程序单元测试开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
可用,因为只有在调用 actionPerform()后,Requ

estProcessor才能够创建这些行为实例。

既然你不能很容易地把行为实例传播到MockStrutsTestCase中,那么,为什么不子类化 RequestProcessor并重载processActionCreate()方法呢?在这个重载方法中,你可以存取所有的行为实 例;这样以来,创建、配置和设置对相应行为实例的一个模拟一下子变得非常直接。因为应该在执行完 actionPerform()之后调用MockControl.verify()方法,所以,你还需要重载processActionPerform()以 进行此校验调用。

这种方案对于测试正规的Struts应用程序是不太适合的。因为即使所有的行为仅与单个模拟进行交互 ,测试一个行为也有可能要求多个测试方法—每个方法都具有不同的模拟期望。为此,我们建议的方案是 :创建不同的RequestProcessor子类,相应于每个子类设置不同的模拟期望。另外,还需要多个Struts配 置文件来指定不同的RequestProcessor子类。最终,管理大量的测试将成为一件令人头疼的事情。

进行Struts应用程序单元测试开发(3)

时间:2011-10-21 IT168

四、AOP方案

因此,我们非常希望,在执行某行为之前能够通过某种方式实现在MockStrutsTestCase中使用该行为 的实例。如果你熟悉AOP,那么,你会立即意识到它所提供的简单方案即能直接满足这一要求。注意:这 里的关键是定义一个切点,由它负责捕获行为执行连接点;然后通过一个before advice把模拟注入到相 应的行为中。

在此,我选择使用AspectJ框架来实现这一方案。当然,其它的例如Spring AOP这样的AOP实现也应该 能够良好工作。不过,Spring AOP还需要一个额外的步骤—通过Spring框架中的DelegatingActionProxy 类把对Struts行为的管理委托给Spring。

图3展示了基于AOP方案的单元测试示例静态模型。

图3:基于AOP方案的单元测试示例静态模型

SimpleAction是一个Struts行为的子类,同时与ActionService进行协作。其中,SimpleActionTest派 生于MockStrutsTestCase,用来测试SimpleAction。

SimpleActionTest使用EasyMock创建和建立一个模拟ActionService。SimpleActionTest还实现 StrutsActionPreExecuteListener接口以便在即将运行        SimpleAction的execute方法时接 收通知。作为通知的一部分,SimpleActionTest接收SimpleAction实例以便注入ActionService模拟。由 方面类StrutsActionPreExecuteNotifier负责通知任何实现监听器接口的测试类,并且使相应的行为实例 可用。

下面的步骤描述了实现StrutsActionPreExecuteNotifier的过程:

◆首先,由一个切点选择相应的测试方法执行连接点。另一方面,这个测试方法驻留于负责监听该行 为的预执行事件的测试类中。另外,这个切点还会暴露当前执行的测试类对象: pointcut mockStrutsTest(StrutsActionPreExecuteListener actionTest):

◆然后,由第二个切点负责捕获上面的行为执行连接点。通过结合第一个切点,匹配范围被限制到该 行为相应的测试方法的调用流程的内部。这种进一步缩小的范围对行为执行(并非通过测试方法激活)起 到过滤作用。最终,方面根本不会影响到最后生成的代码。该行为及其相应的测试类实例都是经由切点参 数加以暴露的: pointcut strutsActionExecute(Action action, StrutsActionPreExecuteListener actionTest):

进行Struts应用程序单元测试开发(4)

时间:2011-10-21 IT168

◆最后,由一个与前一个切点相关联的before advice负责通知测试类(它们担任行为事件的监听器) 并且传递相应于模拟注入的行为实例:

图4展示了这些类之间的动态交互情形。

图4:类之间的动态交互

注意,图中从行为到方面的虚线描述了对行为执行连接点的捕获情况。此时序图与第一

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号