项目中通过单元测试代码中的spring事务是否起作用

今儿没事,想对代码中事务进行测试,于是乎就创建了一个单元测试进行测试,发现在方法中加上@Transactional注解后,发现在想数据库中插入数据时,代码执行成功,但数据库中却没有数据,于是各种检查,比如:

1、让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

2、让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

3、不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意: 如果异常被try{...}catch{...}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{...}catchthrow Exception}。

可是....,还是不能解决问题。

冥冥之中,突然和一位同事讨论时,看到了这样一段话:

为了使测试数据不对数据库造成污染,在使用Spring_JUnit进行的单元测试的时候,默认会对事务进行回滚,即@Rollback 默认是true,如果想要测试数据不回滚,可设置@Rollback(value = false) 。如果是使用MySQL数据库,在设置了自动回滚之后,如果发现事务依然没有回滚,那么可以查看一下数据库引擎是否是Innodb,因为其他的数据库引擎如MyISAM、Memory 都不支持事务。

明白了,在单元测试中,事务是默认回滚了........

参考:https://blog.csdn.net/howard789/article/details/77801892

原文地址:https://www.cnblogs.com/ysq0908/p/11994098.html