论坛首页 Java企业应用论坛

简述 Spring TestContext Framework

浏览 2281 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-07  
使用Spring TestContext Framework对程序进行单元测试有两种方式,一种是测试类继承AbstractJUnit4SpringContextTests或继承AbstractTransactionalJUnit4SpringContextTests,并且使用@ContextConfiguration注解来指定配置文件的位置,如果不置顶配置文件的位置的话,它会默认测试目标类的全限名加上"-context.xml"(eg: com.sch.services.UserService默认的配置文件为:classpath:com/sch/services/UserService-context.xml).
先来看一下AbstractJUnit4SpringContextTests和AbstractTransactionalJUnit4SpringContextTests的原型,了解两者的区别:
AbstractJUnit4SpringContextTests:
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例运行器
 @TestExecutionListeners(                 // 注册了两个TestExecutionListener监听器
  { DependencyInjectionTestExecutionListener.class,
    DirtiesContextTestExecutionListener.class })
 public class AbstractJUnit4SpringContextTests implements ApplicationContextAware {
  	…
  }

AbstractTransactionalJUnit4SpringContextTests:
// 注册测试用例事务管理的监听器
  @TestExecutionListeners( { TransactionalTestExecutionListener.class })
  @Transactional    // 使测试用例的所有方法都将工作于事务环境下
  public class AbstractTransactionalJUnit4SpringContextTests 
  extends AbstractJUnit4SpringContextTests {
    …
  }

可以看出AbstractTransactionalJUnit4SpringContextTests 是继承于AbstractJUnit4SpringContextTests 并增加了一个TransactionalTestExecutionListener监听器,可见AbstractTransactionalJUnit4SpringContextTests 增加了测试类对事物的控制,可见测试类可以使用注解也可以使用继承抽象类。

接下来看一下3个监听器的作用:

DependencyInjectionTestExecutionListener提供了依赖注入的功能,它负责解析测试类中的@Autowried和@Resource注解

DirtiesContextTestExecutionListener只要的作用是处理测试类中的上下文遭到破坏时,重新注册上下文,即在测试方法上使用@DirtiesContext启用;当测试方法被@DirtiesContext注解修饰时,当测试方法结束的时候,Spring TestContext会刷新Spring的上下文(就是重新创建ApplicationContext)。

TransactionalTestExecutionListener主要负责解析和事物操作有关的注解,例如:@Transaction、@BeforeTransaction、@AfterTransaction、@NotTransactional 以及 @Rollback。

下面来看一下测试相关注解的简单说明:
@TransactionConfiguration使用在类级别上,里面有两个属性,transactionManager 指定事物管理器的名字,默认的名称为:transactionManager;defaultRollback 配置全局默认的事务回滚,默认为:false。

@BeforeTransaction和@AfterTransaction可见是在需要事物的测试方法执行前后调用,和JUnit4中@Before、@After注解类型,当时前者会忽略声明了@NotTransactional注解的测试方法。

@NotTransactional修饰那些不需要事物的测试方法。

@Rollback可以改变测试方法的回滚方式,例如@Rollback(true)可以是测试方法的事物设置为执行完后事物马上回滚。
还有一些注解的使用方法可以参考Spring Reference。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics