`
wtnhwbb
  • 浏览: 164409 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring提供的测试帮助类

阅读更多

前言

       Spring提供了几个单元测试的帮助类,能极大地提高编写测试用例的效率,下面剖析一下这几个类的功能。

ConditionalTestCase

        扩展TestCase类,重写了runBare方法,在执行每个测试方法前调用isDisabledInThisEnvironment判断是否需要继续执行此测试方法。子类可以重写isDisabledInThisEnvironment方法确定是否需要禁止某些测试方法。

AbstractSpringContextTests

       内部使用一个静态的Map缓存ApplicationContext,如果初始化上下文很费时,通过缓存可以极大的提高性能。

通常不需要直接扩展这个类,而是扩展这个类的子类,其子类必须实现loadContext方法负责上下文加载逻辑。

AbstractSingleSpringContextTests

       内部保存单个上下文实例。通过重写超类的loadContext方法,从getConfigLocations方法返回的Spring配置文件中加载上下文来实现。除非调用setDirty方法,否则上下文不会进行重加载,这在上下文初始化比较慢时可以显著提升性能,比如使用Hibernate时。

       通常情况下子类只需要重写getConfigLocations方法提供需要的配置文件名称,配置文件名称是相对于类路径的。

       如果不希望从一个配置文件数组中加载上下文,可以重写contextKeyloadContext方法。

       此类将setUptearDown方法改写为final的模板方法,在setUp方法里加载上下文,tearDown方法销毁上下文。子类只能通过重写onSetUponTearDown方法提供自定义的初始化和销毁逻辑。

AbstractDependencyInjectionSpringContextTests

       这是一个依赖上下文的便利超类,测试实例本身是通过依赖注入的。

       支持两种模式操纵测试实例,一种是经过设值方式注入,此时是通过类型自动绑定的,另一种是经过字段注入,此时是通过名称自动绑定的,将上下文中的Bean名称和测试实例的保护类型进行绑定。

       缺省采用设值方法注入,如果需要采用字段注入,需要在构造函数中设置populateProtectedVariables属性为true

AbstractTransactionalSpringContextTests

       这是一个针对需要在事务环境下执行测试的便利超类,通常会在每个测试完成时执行事务回滚。许多情况下,这是非常有用的,比如:

l         可以在不影响别的测试的情况下在数据库中插入或删除任何数据。

l         为任何要求事务的代码提供事务上下文。

       如果数据应该保留在数据库中,需要在测试方法中调用setComplete方法。

       可以调用startNewTransaction方法创建一个新的事务,前提是必须先调用endTransaction方法终止旧的事务。

       事务行为要求在上下文中有一个实现PlatformTransactionManager接口的Bean实例,这将通过其超类的依赖注入机制自动注入,如果需要使用超类的字段注入机制,那么Bean实例必须命名为transactionManager,这种机制允许上下文配置中存在一个或多个事务管理器实例的情况。

       如果没有配置事务管理器,将不会使用事务管理,需要当心的是这可能会造成数据更改,一旦关闭超类的信赖检测将会启动此模式。

       此类主要是通过重写AbstractSingleSpringContextTests超类提供的onSetUponTearDown方法,在相应的方法中创建和关闭事务来实现的。

AbstractTransactionalDataSourceSpringContextTests

       此类给其超类添加了一些针对JDBC操作的便利方法,要求有一个javax.sql.DataSource实例定义在上下文中,此类会暴露一个org.springframework.jdbc.core.JdbcTemplate实例,并提供了一些便利方法,如删除某个表中的数据,计算某个表的行数,执行数据库脚本等。

范例

       Springside框架就充分利用spring提供的工具类,简化测试工作量。比如springside提供一个DaoTestCase子类用于Hibernate的测试,该类继承自AbstractTransactionalDataSourceSpringContextTests,只需要重写如下方法:

 

<o:p></o:p>

<o:p></o:p>

 

java 代码
  1. protected String[] getConfigLocations() {   
  2.   
  3.        setAutowireMode(AUTOWIRE_BY_NAME);   
  4.   
  5.        return new String[]{Constants.DEFAULT_CONTEXT, Constants.DEFAULT_TEST_CONTEXT};  }   

 

       以上实现中将源上下文配置及测试上下文配置作为AbstractSingleSpringContextTests

超类的上下文来源,而AbstractDependencyInjectionSpringContextTests提供了自动依赖注入功能,极大简化测试工作量。

分享到:
评论

相关推荐

    Spring中文帮助文档

    8.2.2. 单元测试支持类 8.3. 集成测试 8.3.1. 概览 8.3.2. 使用哪个支持框架 8.3.3. 通用目标 8.3.4. JDBC测试支持 8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8....

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

    Spring 2.0.8 API帮助文档

    从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。  ◆目的:解决企业应用开发的复杂性  ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能  ◆范围:任何Java应用  ...

    老王读spring-aop源码分析&amp;测试代码.zip

    老王读 Spring AOP 系列文章的源码分析&测试代码 帮助大家学习 Spring 源码,更加了解 Spring 的底层 博客专栏地址:https://blog.csdn.net/wang489687009/category_11269905.html

    spring mvc jpa单元测试例子

    这是一个测试事务管理的例子,希望对你们有所帮助,项目里子是在myeclipse中的maven创建的。myeclipse应该可以直接运行。

    Spring 3.0就这么简单源代码

    不仅讲解了Spring 3.0的基础知识,还深入讨论了Spring IoC容器、Spring AOP、使用Spring JDBC访问数据库、集成Hibernate、Spring的事务管理、Spring MVC、单元测试、敏捷开发技术等内容,帮助读者快速入门并可以立刻...

    【Spring整合Mybatis配置及测试代码】

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 ...

    Spring MVC Cookbook.pdf英文版

    值得一提的是,本书针对Spring MVC的每一项特性都提供了完整可运行的示例代码,可以帮助读者更好地掌握这项技术。 无论是Spring MVC的初学者,还是拥有一定经验的开发人员,都能够从本书中获得启发,更好地理解...

    SpringCloud微服务接口这么多怎么调试

    本文来自程序猿,本文主要介绍了SpringCloud微服务下服务接口调试及管理,什么样方式可以让微服务的接口管理变得更加容易些,希望对您的学习有所帮助。我们知道在微服务架构下,软件系统会被拆分成很多个独立运行的...

    Spring 2.0 开发参考手册

    18.3. 使用Spring提供的辅助类实现EJB组件 19. JMS 19.1. 简介 19.2. 使用Spring JMS 19.2.1. JmsTemplate 19.2.2. 连接工厂 19.2.3. (消息)目的地管理 19.2.4. 消息侦听容器 19.2.5. 事务管理 19.3. 发送...

    Spring-Reference_zh_CN(Spring中文参考手册)

    14.2.3. 帮助简化开发的额外的标签 14.3. Tiles 14.3.1. 需要的资源 14.3.2. 如何集成Tiles 14.3.2.1. InternalResourceViewResolver 14.3.2.2. ResourceBundleViewResolver 14.4. Velocity和FreeMarker 14.4.1. ...

    springboot 集成封装redis工具类redisUtils和单元测试

    文章是redisUtils工具类的封装,和基于springboot环境的单元测试; 文中封装了redis的众多方法,希望对您有所帮助。

    Spring高级之注解驱动开发视频教程

    同时,在3.x版本之后,它开始之初Rest风格的请求URL,为开发者提供了开发基于Restful访问规则的项目提供了帮助。 SpringData是一组技术合集。里面包含了JDBC,Data JPA,Data Redis,Data Mongodb,Data Rabbit,...

    Spring Boot 进阶笔记(详细全面) 中文PDF完整版.pdf

    本资料主要包含了Spring Boot的高级应用,包括Spring Boot的自动配置、Spring Boot的Web开发、Spring Boot的数据访问、Spring Boot的缓存、Spring Boot的消息队列、Spring Boot的安全、Spring Boot的测试等方面的...

    老王读spring-ioc源码分析&amp;测试代码.zip

    老王读 Spring IoC 系列文章的源码分析&测试代码 Spring IoC 源码分析,帮助大家学习 Spring 源码,更加了解 Spring 的底层 博客专栏地址:https://blog.csdn.net/wang489687009/category_11269905.html

    Spring 3.0就这么简单_Part3.pdf

    《Spring 3.0就这么简单》语言简洁,实例丰富,可帮助读者迅速掌握使用Spring3.0进行开发所需的各种技能。《Spring3.0就这么简单》适合于具有一定Java编程基础的读者,以及在Java平台下进行各类软件开发的开发人员和...

    精通spring--源代码

    精通spring 源代码 对JavaEE5及Spring2.5进行了综述。包括Java EE5,步入Spring2.5,获得... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值

    Spring API

    8.2.2. 单元测试支持类 8.3. 集成测试 8.3.1. 概览 8.3.2. 使用哪个支持框架 8.3.3. 通用目标 8.3.4. JDBC测试支持 8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8....

    精通Spring(书签)

    专业人士,权威经典。  Spring 2.5是迄今为止完美的Java EE架构级框架,全面深入、多维度... 全书理论与实践并重,通过大量的实例帮助读者尽快掌握Spring2,5的各种基本和高级使用技巧,从而提高本书的参考和阅读价值

    spring MVC数据绑定大全

    总结出以下几种情况 希望对刚接触spring mvc 的朋友有所帮助 "&gt;spring MVC数据绑定 含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring ...

Global site tag (gtag.js) - Google Analytics