快速业务通道

AspectJ和模仿对象的测试灵活性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
但是不管我们做什么,都必须确保测试 aspect 只影响在测试代码中出现的查找。为了实现这一点,我们可以使用 cflow() pointcut。 cflow 选出程序的所有在另一个 joinpoint 上下文中出现的执行点。

下面的代码片段展示了如何修改示例应用程序来使用基于 cflow 的 pointcut。

pointcut inTest() : execution(public void ClientBeanTest.test*()); /*then, later*/ cflow(inTest()) && //other conditions

这几行定义了测试上下文。第一行为 ClientBeanTest 类中什么也不返回、拥有公共访问权并以 test 一词开头的所有方法执行的集合起名为 inTest() 。表达式 cflow(inTest()) 选出在这样的方法执行和其返回之间出现的所有 joinpoint。所以, cflow(inTest()) 的意思就是“当 ClientBeanTest 中的测试方法执行时”。

样本应用程序的测试组可以在两个不同的配置中构建,每一种使用不同的 aspect 。第一个配置用模仿对象替换真正的 CustomerManager 。第二个配置不替换对象,但选择性地替换 ClientBean 对 EJB 组件作出的调用。在两种情况下,aspect 管理表示,同时确保客户从 CustomerManager 接收到可预知的结果。通过检查这些结果, ClientBeanTest 可以确保客户机正确使用 EJB 组件。

AspectJ和模仿对象的测试灵活性(7)

时间:2011-06-25 IBM Nicholas Lesiecki

使用 aspect 替换 EJB 查找

第一个配置(如清单 8 所示)向示例应用程序应用了一个名为 ObjectReplacement 的 aspect。它的工作原理是替换任何对 Context.lookup(String) 方法调用的结果。

这种方法允许在 ClientBean 预期的 JNDI 配置的非就绪的环境中运行测试案例,也就是从命令行或简单的 Ant 环境运行。您可以在部署 EJB 之前(甚至在编写它们之前)执行测试案例。如果您依赖于一个超出您控制范围的远程服务,就可以不管是否能够接受在测试上下文中使用实际服务来运行单元测试了。

清单 8. ObjectReplacement aspect

import javax.naming.Context; public aspect ObjectReplacement{      /**      * Defines a set of test methods.      */      pointcut inTest() : execution(public void ClientBeanTest.*());      /**      * Selects calls to Context.lookup occurring within test methods.      */      pointcut jndiLookup(String name) :          cflow(inTest()) &&          call(Object Context.lookup(String)) &&          args(name);      /**      * This advice executes *instead of* Context.lookup       */      Object around(String name) : jndiLookup(name){        if("java:comp/env/ejb/CustomerManager".equals(name)){          return new MockCustomerManagerHome();        }        else{          throw new Error("ClientBean should not lookup any EJBs " +                  "except CustomerManager");        }      } }

pointcut jndiLookup 使用前面讨论的 pointcut 来识别对 Context.lookup() 的相关调用。我们在定义 jndiLookup pointcut 之后,就可以定义执行而不是查找的代码了。

AspectJ和模仿对象的测试灵活性(8)

时间:2011-06-25 IBM Nicholas Lesiecki

关于“建议”

AspectJ 使用 建议(advice)一词来描述在 joinpoint 执行的代码。 ObjectReplacement aspect 使用一条建议(在上面以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号