快速业务通道

AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式

时间:2011-09-07 IBM Nicholas Lesiecki

简介:AOP 使编写特定于应用程序的横切关注点测试比任何时候都要容易了 。 要了解其原因以及如何实现,请听 Nicholas Lesiecki 介绍测试面向方面的代 码 所具有的好处,并展示在 AspectJ 中测试横切行为的样式。

在过去五年中广泛采用的程序员测试是由显著的生产率和得到的代码质量所 驱 动的。不过,在面向方面编程(AOP)出现之前,为横切行为(如安全、事务管 理 或者持久性)编写测试很困难。为什么呢?因为这些行为没有很好地模块化。如 果没有可测试的单元,那么就很难编写出单元测试。随着 AOP 的普及,编写与 横 切关注点在目标系统中的实现无关的、对其进行检查的测试已变得可行并且值得 去做。

在本文中,我将介绍测试用方面实现的横切行为的一组技术。重点放在方面 的 单元测试,但是我也展示了有助于建立对面向方面应用程序的信任度的其他模式 。很快您就会看到,测试方面涉及许多与测试对象相同的技巧和概念,并且有许 多相同的做法和设计好处。

本文的撰写基于我在 AspectJ 中的经验。许多概念应当可以移植到其他 AOP 实现中,但是有些概念是特定于语言的。请参阅 下载 以下载本文源代码,请参 阅 参考资料 以下载完成例子所需要的 Aspectj 和 AJDT。

面向方面代码的单元测试

应用程序的好的自动测试集应当像图 1 那样:以隔离的、对各个类的测试构 成一个广泛的基础,使测试覆盖面广,并能迅速分离出错误。在这之上是集成的 、端到端的系统测试,它验证各单元是否可以协调工作。如果这些层是良构的并 且频繁运行,那么它们结合在一起可以增加对于应用程序行为的信任度。

在金字塔底部的单元测试很重要,这有几个理由。首先,它们帮助您产生那 些 在集成测试中难于再现或者需要繁琐步骤才能再现的关注点用例。其次,由于它 们涉及的代码更少,因此它们运行起来通常更快(因此可以更经常地运行它们) 。第三,它们可以帮助您思考每个单元的接口和要求。好的单元测试要求单元间 的松散耦合,这是在测试条件下让测试得以运行的条件。

图 1. 分层的测试

AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式 - 编程入门网

但是横切行为会怎么样呢?想像一位客户的要求:“在执行对 ATM 类的任何 操作之前要检查调用者的安全凭证。”当然可以(并且应该)针对这项要求编写 集成测试。不过,非面向对象的开发环境使得编写“在操作之前检查安全性”这 种行为的单元测试很难将这种行为分离出来。这是因为行为混入到了目标系统中 ,让人很难把握或者用工具分析。但是如果用方面开发,那么就可以将这些行为 表示为建议(advice),应用到所有匹配某个切点(pointcut)的操作。现在行 为就可以很好地用单元表示,可以在隔离的情况下测试或者在 IDE 显示它。

AOP@Work: 对方面进行单元测试-验证横切行为的八种新模式(2)

时间:2011-09-07 IBM Nicholas Lesiecki

面向方面的代码在哪里出现问题了

在讨论对方面进行单元测试的技术之前,我要简单讨论错误类型。横切行为 分 为两个主要部分:行为做什么(我称之为横切功能)和行为用在什么地方(我称 之为横切规范)。回到 ATM 的例子,横切功能检查调用者的安全凭证。横切规 范 检查 ATM 类中每一个公共方法。

为了实现的真正信任度,需要同时检查功能和规范(或者不严格地说,建议 和 切点)。在完成这个例子的过程中,我将强调给定的测试模式是验证横切功能、 规范,还是两者同时验证。

注意我将重点放在测试切点、建议和支持它们的代码上。类型间声明(和其 他 方面功能)当然是可测试的。我在本文中展示的一些技巧稍加修改就可以对它们 使用。它们还有自己的一组技巧,其中许多是很直观的。不

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