论文部分内容阅读
单元测试是为了发现软件设计的最小单位(程序模块)中存在的错误而进行的测试工作。作为软件项目中最早介入的测试工作,单元测试是集成测试和系统测试的基础,单元测试的成功与否直接关系到软件的质量。在其它领域,单元测试也一样重要并受到关注:测试优先的开发方法(Test Driven Development,简称TDD),要求在写实际的代码之前,先写出单元测试用例;软件重构(Software Refactoring)的首要前提就是拥有一个可靠的单元测试环境。单元测试是当前应用和研究的热点。 面向方面编程(Aspect-Oriented Programming,简称AOP)是施乐公司帕洛阿尔托研究中心(Xerox PARC)在上世纪90年代最先提出的一种编程模型,它使开发人员可以更好地将本不该彼此纠缠在一起的辅助任务同核心任务分离开来。AOP的精髓在于关注点的分离,更准确地说是核心关注点和其它关注点(也称为核心关注点的横切关注点)的分离。使用AOP编程语言可以将每个横切关注点单独描述。在编译或者运行期间,这些横切关注点会被织入到核心关注点代码中。AOP技术作为OOP的补充,随着开发工具和环境的成熟,得到了广泛的关注研究和应用。 本文分别深入研究了面向方面编程技术和单元测试,发现了两者之间的联系。根据对单元测试本身特征的研究和Erik Ernst提出的判断AOP中关注点的标准。本文认为:从AOP的角度看,单元测试是被测单元的一个横切关注点。 随后,通过对单元测试中遇到的几个难题的研究,本文先给出传统的解决方法,再给出使用了AOP技术的更简单更有效的解决方法。从而不仅说明了使用AOP技术可以帮助解决单元测试中的难题,还给出了这些难题的解决方法。这些难题包括被测代码如何与外部依赖服务隔离的问题,测试代码如何访问被测类中封装的私有变量和函数等等。对于其它问题,如对历史遗留代码的测试也给出了基于AOP技术的解决思路。 在此基础上,本文给出了一个通过基于面向方面编程的可扩展的单元测试框架ATest(Aspect-Oriented Unit Test Framework的简称)。该框架使用了较为成熟的AspectJ语言来解决单元测试问题。对单元测试中若干难题的解决也被集成到该框架中。该框架具有一定的扩展性,对单元测试中特定问题的解决方法可以通过扩展接口加入至该框架中,从而使得该框架更具实用性。 最后,本文对相关研究工作做了总结,并展望了AOP技术在单元测试中的前景。