junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解

来源:互联网 发布:淘宝看数据的插件 编辑:程序博客网 时间:2024/06/03 18:17
使用Spring TestContext Framework对程序进行单元测试有两种方式,一种是测试类继承AbstractJUnit4SpringContextTests或继承AbstractTransactionalJUnit4SpringContextTests,并且使用@ContextConfiguration注解来指定配置文件的位置,如果不置顶配置文件的位置的话,它会默认测试目标类的全限名加上"-context.xml"(eg: com.sch.services.UserService默认的配置文件为:classpath:com/sch/services/UserService-context.xml). 
先来看一下AbstractJUnit4SpringContextTests和AbstractTransactionalJUnit4SpringContextTests的原型,了解两者的区别: 
AbstractJUnit4SpringContextTests: 
Java代码  收藏代码
  1. @RunWith(SpringJUnit4ClassRunner.class//指定测试用例运行器  
  2.  @TestExecutionListeners(                 // 注册了两个TestExecutionListener监听器  
  3.   { DependencyInjectionTestExecutionListener.class,  
  4.     DirtiesContextTestExecutionListener.class })  
  5.  public class AbstractJUnit4SpringContextTests implements ApplicationContextAware {  
  6.     …  
  7.   }  

AbstractTransactionalJUnit4SpringContextTests: 
Java代码  收藏代码
  1. // 注册测试用例事务管理的监听器  
  2.   @TestExecutionListeners( { TransactionalTestExecutionListener.class })  
  3.   @Transactional    // 使测试用例的所有方法都将工作于事务环境下  
  4.   public class AbstractTransactionalJUnit4SpringContextTests   
  5.   extends AbstractJUnit4SpringContextTests {  
  6.     …  
  7.   }  

可以看出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。
1 0
原创粉丝点击