2023-10-27 如何让springTest里的Transa

2023-10-26  本文已影响0人  人人为它

在junit里用过Transactional 注解的小伙伴肯定是发现的.无论你出不出错.他都是回滚的.

可能这能满足大部分小伙伴的需求.但是对于我他.有点满足不了..因为我是拿测试用例来造数据的...

而且没有事务..每次要是新业务,,插入到一半出了个错..删除脏数据也得删半天.等等情况..

那么我就想.能不能让测试用例的Transactional也和业务一样呢..

瞄了一眼.spring怎么干的

spring测试用例跑之前会有一堆TestExecutionListener的实现会跑

其中处理事务相关的就是TransactionalTestExecutionListener

看了眼他的代码发现

他是用TransactionContext类把事务相关的包起来了.然后构造的时候传入isRollBack.简单粗暴的来决定是不是要回滚.

那其实问题就简单了.不用他这个事务管理器不就完事.自己写一个.

核心代码如下

NeedBusinessTransactional 这个注解是为了区别.到底是不是要用业务事务..毕竟..有的人就喜欢他默认实现..改默认实现我个人认为是不好的.

起码是要加个条件..

然后在注解类上加上

@TestExecutionListeners(value = ReplaceTransExecutionListener.class,mergeMode =

TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)

把自己的listener加到默认的listener之中就可以了.

只要这样就可以让事务注解的效果和业务中一样了.

上一篇下一篇

猜你喜欢

热点阅读