使用Spring进行单元测试(上)

发表于:2013-6-05 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:赵才文    来源:51Testing软件测试网采编

  简介:通过本文,您能够在较短的时间内掌握使用 Spring 单元测试框架测试基于 Spring 的应用程序的方法,这套方法主要涵盖如何使用 Spring 测试注释来进行常见的 Junit4 或者 TestNG 的单元测试,同时支持访问 Spring 的 beanFactory 和进行自动化的事务管理。

  概述

  单元测试和集成测试在我们的软件开发整个流程中占有举足轻重的地位,一方面,程序员通过编写单元测试来验证自己程序的有效性,另外一方面,管理者通过持续自动的执行单元测试和分析单元测试的覆盖率等来确保软件本身的质量。这里,我们先不谈单元测试本身的重要性,对于目前大多数的基于 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.jar

  ● commons-logging.jar

  ● hsqldb.jar

  ● Junit-4.5.jar

  ● log4j-1.2.14.jar

  ● Spring-asm-3.2.0.M1.jar

  ● Spring-beans-3.2.0.M1.jar

  ● Spring-context-3.2.0.M1.jar

  ● Spring-core-3.2.0.M1.jar

  ● Spring-expression-3.2.0.M1.jar

  ● Spring-jdbc-3.2.0.M1.jar

  ● Spring-test-3.2.0.M1.jar

  ● Spring-tx-3.2.0.M1.jar

  ● testng-6.8.jar

  其中的 hsqldb 是我们测试用数据库。

  图 1. 工程目录结构

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号