Spring TestContext 做带事务回滚的JUnit测试

 转自 http://tieba.baidu.com/p/2355323012

1. 首先导入相关jar包和library 
jar
包在Springlib Spring-test这个jar



 

然后导入JUnit4library这个不用我教了吧。。。



 

2.然后再工程中新建一个src folder起名为test
test文件夹下建立一个包暂定为com.test创建一个类普通的类即可
我起名为SchoolTest


  
这个SchoolTest类要继承AbstractTransactionalJUnit4SpringTestContextTests哥纯粹是背下来的毕竟以前当过翻译英文还凑合不过背不下来也没关系其实很好理解 
Transactional
代表事务的其他几个单词其实不用解释你也知道多默写几遍就自然熟练了




 

3.接下来在这个类上面加一个注解@RunWith(SpringJUnit4ClassRunner.class) 
RunWith
junit4的注解意思是此类由这个注解的参数的类来主导单元测试参数类型是Class
SpringJUnit4ClassRunner.class
SpringTest中的一个类作用类似驱动意思是由Spring Test来主导本次单元测试



 

4.然后在这个类上写第二个注解
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
ContextConfiguration
的作用是定位你的上下文配置文件作用就是减少硬编码 getBean之类的
一旦开始测试 Spring测试框架就去指定位置读取配置文件完成依赖注入
参数是locations注意有了s代表复数参数的取值是字符串数组所以参数要加{}但如果参数只有一个可以省略{}但注意只有在注解的参数类型是数组且只有一个参数时可以省略{}
别给我在普通java类里来个String[] a="sb";这样的

 



还有如果applicationContext.xml位于根目录下就一定要写classpath:否则会出错
至于放在默认的WEB-INF下得情况我没试过是不是可以不写locations我也不想去试没必要



 

 

5.然后再写第三个注解
@TestExecutionListeners(listeners={
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
TestExecutionListener
顾名思义测试执行监听器配置的是一系列监听器至于监听器的作用本文暂时不提自行百度
参数是listeners同上参数类型是Class数组里面是各式各样的监听器我选了两个
一个是DependencyInjectionTestExecutionListener监听测试类中的依赖注入是否正确不正确的话有什么结果我也不知道因为我每次都写对的。。。
另一个是TransactionalTestExecutionListener监听测试类中的事务如果测试类中涉及事务就必须配这个监听器



 



 

6.接下来写第四个注解
@TransactionConfiguration(transactionManager="txManager",defaultRollback=true)
TransactionConfiguration
顾名思义是配置事务情况的注解
第一个参数transactionManager是你在applicationContext.xmlbean.xml中定义的事务管理器的beanid 
defaultRollback
是个很关键的参数是表示测试完成后事务是否会滚参数是布尔型的默认就是true但强烈建议写上true


这是我的Spring配置文件大部分配置都是我手写的少部分是抄spring官方文档的 



 

因为你得把事务管理器给spring spring才能替你托管。。。
至此测试类上的注解全部写完
下面就是简单的内容了



 

7.下面在类中定义一个业务层的对象或者叫属性成员变量随你





这个schoolBiz上面写着@Resource 代表从配置文件读取一个叫做schoolBizbean如果不用Spring托管单元测试这个写是无法完成注入的因为没有一个容器初始化配置文件中的beantomcat启动时 tomcat会读取这个配置文件并初始化但单元测试是与web容器相互独立的所以但用junit需要硬编码但有了spring test 就避免了硬编码



下面写一个要测试的方法加上两个注解
一个是@Test 这个不多说了 Junit自带的注解表示要测试的方法
另一个是@Transactional 表示这个方法是事务的起始点 
注意的是在业务层最好还是别用注解托管事务因为每个方法都要这么写比较麻烦,xml+spring表达式可以给所有方法托管事务



 

 

最后就是写方法里的逻辑了

 

现在开始测试
测试成功!打开数据库什么也没有因为spring替你回滚了事务保护了数据库现场!



 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值