項目中經過單元測試代碼中的spring事務是否起做用

今兒沒事,想對代碼中事務進行測試,因而乎就建立了一個單元測試進行測試,發如今方法中加上@Transactional註解後,發如今想數據庫中插入數據時,代碼執行成功,但數據庫中卻沒有數據,因而各類檢查,好比:數據庫

一、讓checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class) 二、讓unchecked例外不回滾: @Transactional(notRollbackFor=RunTimeException.class) 三、不須要事務管理的(只查詢的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 注意: 若是異常被try{...}catch{...}了,事務就不回滾了,若是想讓事務回滾必須再往外拋try{...}catchthrow Exception}。

但是....,仍是不能解決問題。單元測試

冥冥之中,忽然和一位同事討論時,看到了這樣一段話:測試

爲了使測試數據不對數據庫形成污染,在使用Spring_JUnit進行的單元測試的時候,默認會對事務進行回滾,即@Rollback 默認是true,若是想要測試數據不回滾,可設置@Rollback(value = false) 。若是是使用MySQL數據庫,在設置了自動回滾以後,若是發現事務依然沒有回滾,那麼能夠查看一下數據庫引擎是不是Innodb,由於其餘的數據庫引擎如MyISAM、Memory 都不支持事務。

spa

明白了,在單元測試中,事務是默認回滾了.........net

 

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

相關文章
相關標籤/搜索