junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解

21 篇文章 1 订阅
13 篇文章 0 订阅
使用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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值