快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
     //[...]

然后 aspect 在每个相关的方法调用上定义 around 建议。当 ClientBeanTest 中出现对 getCustomersOver() 或 register() 的调用时,将改为执行相关的建议,如清单 12 所示:

清单 12. 建议替换测试中的方法调用

void around(String name) throws NameExistsException: callToRegister(name) {        if(!name.equals(ClientBeanTest.NEW_CUSTOMER)){          throw new NameExistsException(name + " already exists!");        }      }      Object around() : callToGetCustomersOver() {        String[] customers = new String[55];        for(int i = 0; i < customers.length; i++){          customers[i] = "Customer Number " + i;        }        return customers;      }

这里的第二个配置在某种程度上简化了测试代码(请注意,对于没有实现的方法,我们不需要分开的模仿类或存根)。

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

时间:2011-06-25 IBM Nicholas Lesiecki

可插的测试配置

AspectJ 允许您随时在这两种配置间切换。因为 aspect 可能影响不了解这两种配置的类,所以在编译时指定一组不同的 aspect 可能会导致系统在运行时和预期完全不同。样本应用程序就利用了这一点。构建替换调用和替换对象示例的两个 Ant 目标几乎完全相同,如下所示:

清单 13. 不同配置的 Ant 目标

<target name="objectReplacement" description="...">       <antcall target="compileAndRunTests">        <param name="argfile"              value="${src}/ajtest/objectReplacement.lst"/>       </antcall>      </target>      [contents of objectReplacement.lst]      @base.lst;[A reference to files included in both configurations]      MockCustomerManagerHome.java      MockCustomerManager.java      ObjectReplacement.java.      <target name="callReplacement" description="...">       <antcall target="deployAndRunTests">        <param name="argfile"              value="${src}/ajtest/callReplacement.lst"/>       </antcall>      </target>      [contents of callReplacement.lst]      @base.lst      CallReplacement.java      RunOnServer.java

Ant 脚本将 argfile 属性传送到 AspectJ 编译器。AspectJ 编译器使用该文件来决定在构建中包括哪些来源(Java 类和 aspect)。通过将 argfile 从 objectReplacement 改为 callReplacement ,构建可以用一个简单的重编译改变测试策略。

插入 Cactus

示例应用程序与 Cactus 捆绑在一起提供,Cactus 是用来执行应用程序服务器中的测试的。要使用 Cactus,您的测试类必须继承 org.apache.cactus.ServletTestCase (而不是通常的 junit.framework.TestCase )。这个基类将自动与部署到应用程序服务器的测试对话。因为测试的“ callReplacement ”版本需要服务器,但“ objectReplacement ”版本不需要,所以我使用了 AspectJ 的另一种功能(叫作 介绍(introduction))来使测试类意识到服务器。 ClientBeanTest 的源版本将继承 TestCase 。如果我希望在服务

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