AspectJ和模仿对象的测试灵活性 - 编程入门网
但是不管我们做什么,都必须确保测试 aspect 只影响在测试代码中出现的查找。为了实现这一点,我们可以使用 cflow() pointcut。 cflow 选出程序的所有在另一个 joinpoint 上下文中出现的执行点。
下面的代码片段展示了如何修改示例应用程序来使用基于 cflow 的 pointcut。
这几行定义了测试上下文。第一行为 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
pointcut jndiLookup 使用前面讨论的 pointcut 来识别对 Context.lookup() 的相关调用。我们在定义 jndiLookup pointcut 之后,就可以定义执行而不是查找的代码了。 AspectJ和模仿对象的测试灵活性(8)时间:2011-06-25 IBM Nicholas Lesiecki关于“建议” AspectJ 使用 建议(advice)一词来描述在 joinpoint 执行的代码。 ObjectReplacement aspect 使用一条建议(在上面以 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |