如何让junitmybatis 手动控制事务务

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&扫盲贴 用Spring TestContext 做带事务回滚的JUnit测试_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:508,210贴子:
扫盲贴 用Spring TestContext 做带事务回滚的JUnit测试收藏
JUnit单元测试框架很常用 但可能会破坏数据库现场 以及大量的硬编码出现(applicationContext.getBean(""));今天哥们给新手介绍一下 Spring Test这个Spring自带的jar包中的一些注解 实现单元测试+事务回滚+注解依赖注入
上海java培训一般需要4-8周,就可完全掌握,名企就业.0元试学.java培训的费用一般根据培训的课时决定,可申请0元试学.点击咨询..
网上的相关教程不多 我的意思是有用的不多 基本都是类似api文档那种 给你罗列一大堆注解和类 告诉你他们的作用 你看完了也不知道该从哪里入手我自己琢磨了几天(哥们天赋不是很高) 写了一个测试类 测试成功 给大家分享一下
首先导入相关jar包和library jar包在Spring的lib下 Spring-test这个jar
然后导入JUnit4的library 这个不用我教了吧。。。
然后再工程中新建一个src folder 起名为test在test文件夹下建立一个包 暂定为com.test 创建一个类 普通的类即可我起名为SchoolTest
这个SchoolTest类要继承AbstractTransactionalJUnit4SpringTestContextTests 哥纯粹是背下来的 毕竟以前当过翻译 英文还凑合 不过背不下来也没关系 其实很好理解 Transactional代表事务的 其他几个单词其实不用解释你也知道 多默写几遍就自然熟练了
接下来 在这个类上面加一个注解@RunWith(SpringJUnit4ClassRunner.class) RunWith是junit4的注解 意思是此类由这个注解的参数的类来主导单元测试 参数类型是ClassSpringJUnit4ClassRunner.class是SpringTest中的一个类 作用类似驱动 意思是由Spring Test来主导本次单元测试
然后在这个类上写第二个注解@ContextConfiguration(locations={"classpath:applicationContext.xml"})ContextConfiguration的作用是定位你的上下文配置文件 作用就是减少硬编码 getBean之类的一旦开始测试 Spring 测试框架就去指定位置读取配置文件 完成依赖注入参数是locations 注意有了s代表复数 参数的取值是字符串数组 所以参数要加{} 但如果参数只有一个 可以省略{} 但注意 只有在注解的参数类型是数组且只有一个参数时 可以省略{}别给我在普通java类里来个String[] a="sb";这样的
还有如果applicationContext.xml位于根目录下 就一定要写classpath: 否则会出错至于放在默认的WEB-INF下得情况 我没试过是不是可以不写locations 我也不想去试 没必要
然后再写第三个注解@TestExecutionListeners(listeners={
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})TestExecutionListener 顾名思义 测试执行监听器 配置的是一系列监听器 至于监听器的作用本文暂时不提 自行百度参数是listeners 同上 参数类型是Class数组 里面是各式各样的监听器 我选了两个一个是DependencyInjectionTestExecutionListener 监听测试类中的依赖注入是否正确 不正确的话有什么结果我也不知道 因为我每次都写对的。。。另一个是TransactionalTestExecutionListener 监听测试类中的事务 如果测试类中涉及事务 就必须配这个监听器
接下来写第四个注解@TransactionConfiguration(transactionManager="txManager",defaultRollback=true)TransactionConfiguration 顾名思义 是配置事务情况的注解第一个参数transactionManager是你在applicationContext.xml或bean.xml中定义的事务管理器的bean的id defaultRollback是个很关键的参数 是表示测试完成后事务是否会滚 参数是布尔型的 默认就是true 但强烈建议写上true这是我的Spring配置文件 大部分配置都是我手写的 少部分是抄spring官方文档的
因为你得把事务管理器给spring spring才能替你托管。。。至此测试类上的注解全部写完下面就是简单的内容了
下面在类中定义一个业务层的对象 或者叫属性 成员变量 随你这个schoolBiz上面写着 代表从配置文件读取一个叫做schoolBiz的bean 如果不用Spring托管单元测试 这个写是无法完成注入的 因为没有一个容器初始化配置文件中的bean 在tomcat启动时 tomcat会读取这个配置文件并初始化 但单元测试是与web容器相互独立的 所以但用junit需要硬编码 但有了spring test 就避免了硬编码
下面 写一个要测试的方法 加上两个注解一个是 这个不多说了 Junit自带的注解 表示要测试的方法另一个是 表示这个方法是事务的起始点 注意的是 在业务层最好还是别用注解托管事务 因为每个方法都要这么写比较麻烦 用xml+spring表达式可以给所有方法托管事务
最后就是写方法里的逻辑了
现在开始测试测试成功! 打开数据库 什么也没有 因为spring替你回滚了事务 保护了数据库现场!看数据库表 什么也没有吧
有人跟哥说 Spring的类名怎么都那么操蛋啊 哥所有的注解名字都是自己背下来的 大家多练练就行了
一天练一遍 每天练 没有背不下来的道理
顶一个 技术好贴不可多得 给初学者莫大帮助
可不可以不要这么断续呢
很好很强大
好帖 好帖要顶
谢谢楼主,今天面试被问了这个问题,回来找到你这篇文章
竟然还要背下来。。。我一直都想Alt+/
但是比如id有自增的话,还是会使id增长的,不是对数据库完全没有影响
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&3277人阅读
在spring的环境下进行junit测试,事务回滚的一次学习:
首先配置一个事务管理器:
&!-- 定义transactionManager --&
&&& &bean id=&txManager&
&&& &&& class=&org.springframework.orm.hibernate3.HibernateTransactionManager&&
&&& &&& &property name=&sessionFactory& ref=&sessionFactory& /&
&&& &/bean&
&!-- 声明Txadvice --&
&&& &tx:advice id=&txAdvice& transaction-manager=&txManager&&
&&& &&& &!-- 对add/update/delete开头的方法事物管理 --&
&&& &&& &tx:attributes&
&&& &&& &&& &tx:method name=&add*& propagation=&REQUIRED&/&
&&& &&& &&& &tx:method name=&delete*& propagation=&REQUIRED&/&
&&& &&& &&& &tx:method name=&update*& propagation=&REQUIRED&/&
&&& &&& &&& &tx:method name=&query*& read-only=&true& /&
&&& &&& &&& &tx:method name=&*& read-only=&true& /&
&&& &&& &/tx:attributes&
&&& &/tx:advice&
&&& &!--& 定义Pointcut并织入& --&
&&& &aop:config&
&&& &&& &aop:pointcut id=&fooServiceOperation&
&&& &&& &&& expression=&execution(* com.crm.biz..*.*(..))& /&
&&& &&& &aop:advisor advice-ref=&txAdvice&
&&& &&& &&& pointcut-ref=&fooServiceOperation& /&
&&& &/aop:config&
接下来就是我们的Test方法了:
import org.junit.runner.RunW
import org.springframework.test.context.ContextC
import org.springframework.test.context.TestExecutionL
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextT
import org.springframework.test.context.junit4.SpringJUnit4ClassR
import org.springframework.test.context.support.DependencyInjectionTestExecutionL
import org.springframework.test.context.support.DirtiesContextTestExecutionL
import org.springframework.test.context.transaction.TransactionalTestExecutionL
import org.springframework.transaction.annotation.T
@RunWith(SpringJUnit4ClassRunner.class) //表示我们在spring的环境下测试
@ContextConfiguration(locations = {&/applicationContext.xml&}) //用来指定加载spring配置文件的位置
@TestExecutionListeners({
&&& DependencyInjectionTestExecutionListener.class,
&&& DirtiesContextTestExecutionListener.class,
&&& TransactionalTestExecutionListener.class })//定义类级别的元数据,TestExecutionListener
s会使用TestContextManager
进行注册。 通常,@TestExecutionListeners
与@ContextConfiguration
会搭配使用。
@Transactional //在需要事务管理的地方加
@Transactional 注解。
@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public
public class BaseTests extends AbstractJUnit4SpringContextTests {
&&& //通过传入注入的id得到实例
&&& public Object getBean(String name) {
&&& &&& return applicationContext.getBean(name);&
所有的类继承这个基类每个方法上加上@Test就可以了;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20424次
排名:千里之外
(1)(1)(2)(1)(2)(2)

我要回帖

更多关于 mybatis 手动控制事务 的文章

 

随机推荐