AspectJ和模仿对象的测试灵活性 - 编程入门网
AspectJ和模仿对象的测试灵活性时间:2011-06-25 IBM Nicholas Lesiecki用“test-only”行为增强单元测试 简介: 在开发过程中结合了单元测试的程序员都了解这样做带来的好处:代码更简洁,敢于重构、速度更快。但即便是最执著的单元测试者,在碰到测试行为依赖于系统状态的类的情况时,也会显得信心不足。Nicholas Lesiecki 是一名受人尊敬的 Java 程序员,也是 XP 社区的领导者,他将介绍围绕测试案例隔离的问题,并向我们展示如何使用模仿对象(mock object)和 AspectJ 来开发精确和健壮的单元测试。 最近,人们对极端编程(Extreme Programming,XP)的关注已经扩大到它的一个最具可移植性的应用上:单元测试和最初测试设计。因为软件工作室已经开始采用 XP 的开发方法,我们可以看到,因为有了一套全面的单元测试工具,很多开发者的开发质量和速度都得到了提高。但编写好的单元测试耗时费力。因为每个单元都与其它单元合作,所以编写单元测试可能需要大量的设置代码。这使得测试变得更加昂贵,而且在特定情况下(比如代码充当远程系统的客户机时),这样的测试可能几乎无法实现。 在 XP 中,单元测试弥补了集成测试和验收测试的不足。后两种测试类型可能由独立的小组进行,或者作为独立的活动进行。但是单元测试是与要测试的代码同时编写的。面对日益逼近的截止期限和令人头痛的单元测试带来的压力,我们很可能随便编写一个测试了事,或者完全放弃测试。因为 XP 依赖于积极的动机和自给自足的习惯,所以 XP 过程(和项目!)的最佳利益就是使测试保持集中和易于编写。 所需背景 本文的重点是 AspectJ 的单元测试,所以文章假定您熟悉基本的单元测试方法。如果您不熟悉 AspectJ,那么在继续之前阅读一下我对 AspectJ 的介绍很可能会对您有所帮助(请参阅 参考资料)。这里所说的 AspectJ 方法不是非常复杂,但面向 aspect 的编程却需要一点时间去习惯。为了运行示例,您需要在测试机器上安装 Ant。不过您不需要具有任何特别的 Ant 专门技术(超出基本安装所需的技术)来运行示例。 模仿对象可以帮助您解决这种进退两难的局面。模仿对象测试用只用于测试的模仿实现来替代和域相关的东西。然而,这种策略的确在某些情况下带来了技术上的难题,比如远程系统上的单元测试。AspectJ 是 Java 语言的一种面向 aspect 的扩展,它允许我们在传统的面向对象方法失败的地方代之以 test-only 行为,从而用其它方法进行单元测试。 在本文中,我们将讨论一种编写单元测试既困难又合乎需要的常见情况。我们将从为一个基于 EJB 的应用程序的客户机组件运行单元测试开始。我们将使用这个示例作为出发点,来讨论在远程客户机对象上进行单元测试时可能出现的一些问题。为了解决这些问题,我们将开发两个新的依赖于 AspectJ 和模仿对象的测试配置。看到文章末尾时,您就应该对常见的单元测试问题和它们的解决方案有所了解,还应该初步了解 AspectJ 和模仿对象测试提供的一些有趣的可能性。 单元测试示例 示例由 EJB 客户机的一个测试组成。本案例研究中提出的很多问题都适用于调用 Web 服务的代码、调用 JDBC 的代码、甚至本通过虚包调用的本地应用程序“远程”部分的代码。 服务器端的 CustomerManager EJB 执行两种功能:它查找客户名并向远程系统注册新客户名。清单 1 展示了 CustomerManager 公开给客户机的接口: 清单 1. CustomerManager 的远程接口
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |