详解如何使用Spring进行单元测试2013-09-15 赵 才文 概述单元测试和集成测试在我们的软件开发整个流程中占有举足轻重的地位,一方面,程序员通过编写单元测试 来验证自己程序的有效性,另外一方面,管理者通过持续自动的执行单元测试和分析单元测试的覆盖率等来确保软件本身的 质量。这里,我们先不谈单元测试本身的重要性,对于目前大多数的基于 Java 的企业应用软件来说,Spring 已经成为了 标准配置,一方面它实现了程序之间的低耦合度,另外也通过一些配置减少了企业软件集成的工作量,例如和 Hibernate、 Struts 等的集成。那么,有个问题,在普遍使用 Spring 的应用程序中,我们如何去做单元测试?或者说,我们怎么样能 高效的在 Spring 生态系统中实现各种单元测试手段?这就是本文章要告诉大家的事情。单元测试目前主要的框架 包括 Junit、TestNG,还有些 MOCK 框架,例如 Jmock、Easymock、PowerMock 等,这些都是单元测试的利器,但是当把他 们用在 Spring 的开发环境中,还是那么高效么?还好,Spring 提供了单元测试的强大支持,主要特性包括:支持主流的测试框架 Junit 和 TestNG支持在测试类中使用依赖注入 Denpendency Injection支持测试类的自动化事务管理支持使用各种注释标签,提高开发效率和代码简洁性Spring 3.1 更是支持在测试类中使用非 XML 配置方法和基于 Profile 的 bean 配置模式通过阅读本文,您能够快速的掌握基于 Spring TestContext 框架的测试方法,并了解基本的实现原理。本文将提供大 量测试标签的使用方法,通过这些标签,开发人员能够极大的减少编码工作量。OK,现在让我们开始 Spring 的测试之旅吧 !原来我们是怎么做的这里先展示一个基于 Junit 的单元测试,这个单元测试运行在基于 Spring 的应用 程序中,需要使用 Spring 的相关配置文件来进行测试。相关类图如下:数据库表假设有一个员工账号表, 保存了员工的基本账号信息,表结构如下:ID:整数类型,唯一标识NAME:字符串,登录账号SEX:字符串,性别AGE:字符串,年龄假设表已经建好,且内容为空。测试工程目录结构和依赖 jar 包在 Eclipse 中,我们可以展开工程目 录结构,看到如下图所示的工程目录结构和依赖的 jar 包列表:您需要引入的 jar 包括:cglib-nodep- 2.2.3.jarcommons-logging.jarhsqldb.jarJunit-4.5.jarlog4j-1.2.14.jarSpring-asm-3.2.0.M1.jarSpring-beans-3.2.0.M1.jarSpring-context-3.2.0.M1.jarSpring-core-3.2.0.M1.jarSpring-expression-3.2.0.M1.jarSpring-jdbc-3.2.0.M1.jarSpring-test-3.2.0.M1.jarSpring-tx-3.2.0.M1.jartestng-6.8.jar其中的 hsqldb 是我们测试用数据库。图 1. 工程目录结构