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提供了自动依赖注入功能,极大简化测试工作量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值