zoukankan      html  css  js  c++  java
  • 项目中通过单元测试代码中的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

  • 相关阅读:
    宠物小精灵之收服(dp)
    装箱问题(dp)
    背包问题(采药)
    导弹防御系统(dfs+贪心)
    2018091-2 博客作业
    第一周例行报告
    洛谷 P6378 [PA2010]Riddle
    洛谷 P5782 [POI2001]和平委员会
    洛谷 P3825 [NOI2017]游戏
    POJ 3683 Priest John's Busiest Day
  • 原文地址:https://www.cnblogs.com/ysq0908/p/11994098.html
Copyright © 2011-2022 走看看