日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

不要在 Spring Boot 集成测试中使用 @Transactional

發布時間:2025/7/14 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不要在 Spring Boot 集成测试中使用 @Transactional 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在測試運行時,測試類中 @Transactional 注解,會導致測試中 Entity 數據的操作都是在內存中完成,最終并不會進行 commit 操作,也就是不會將 Entity 數據進行持久化操作,從而導致測試的行為和真實應用的行為不一致。

事務管理在應用開發中是種不可或缺的設計,它是數據庫持久化處理的一種標準。我們知道,應用程序開發離不開對數據的CRUD(增刪改查),事務的ACID性可以更好保證數據的完整性,保證相關數據的同生共死。單個事務生命周期主要分為三個階段,BEGIN TRANSACTION -> COMMIT TRANSACTION -> ROLLBACK TRANSACTION。

Spring Boot事務的使用分為命令式聲明式常用的方式是聲明式注解(@Transactional)。事務管理既可以在應用層使用,也可以在測試中使用。

為了保證測試之間的相互獨立,測試之間數據不會被相互影響。也許你寫過這樣的測試:

@SpringBootTest @ActiveProfiles("test") @Transactional public class UserControllerTest { }

@Transactional 通過將數據持久化操作截斷,來解決測試之間相互對立,數據相互不影響的問題。然而這樣方式會有副作用,就是數據持久化的過程不再真實,沒有了commit的過程。從而會導致:

  • 無法保證 Entity 之間關聯關系,唯一索引和主外鍵關聯的準確性
  • 無法保證 Entity 創建時間、更新時間和版本化(樂觀鎖)的賦值邏輯的準確性
  • 無法保證 Entity 中有 @Transient 注解的屬性的賦值邏輯的準確性
  • 測試的數據不是真實場景存在的問題
  • 測試中,單個事務中的準備數據,無法在多線程中共享。

......

然后 Spring 在測試問題域中引入事務管理初衷是什么?為了解決什么問題才需要將它引入?官方文檔介紹 Transaction management

按照官方文檔意思,為了解決測試運行時,程序訪問真實的數據庫,改變數據的狀態,從而影響到后續的測試問題。

其實這里應該批判性思維一下,為什么測試運行時,需要訪問真實的數據庫?為什么測試之間的數據會相互影響?
對于每個測試來說,每次運行前都應該有干凈的上下文,或者說獨立的上下文,有數據清理和準備的過程,測試與測試之間相互隔離。也就是說,為什么測試不能用內存數據庫或者嵌入式數據庫?為什么不是每個測試運行前清理一下數據庫中的數據,保證測試用例運行前的一方凈土,不被上個測試數據影響?

答案當然是,可以!!!

寫在最后

如何做?實現一個 TruncateDatabaseService,只刪除表的數據,不刪除表的結果。 在測試基類的@BeforeEach,執行 truncate。源碼Truncate Database:

TruncateDatabaseBasicOnHibernateService
TruncateDatabaseBasicOnMybatisService 原文鏈接

總結

以上是生活随笔為你收集整理的不要在 Spring Boot 集成测试中使用 @Transactional的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品福利一区二区三区 | 一区二区三区在线视频观看 | 黄色中文视频 | 久久久最新 | 三男一女吃奶添下面 | 亚欧成人精品 | 五月天婷婷视频 | 日韩精品在线观看免费 | 亚洲 欧美 激情 另类 | 成年人免费毛片 | 91毛片视频| 伊人青青草视频 | 日韩在线播放一区 | 亚洲av成人无码久久精品 | 男人天堂av网 | 精品性久久 | 一区精品在线观看 | 免费一区二区在线观看 | 亚洲精品无码久久久久 | 国产精品无码一区二区无人区多人 | 日韩成人在线观看 | 久草网在线观看 | 国产欧美在线观看 | 黄黄的网站 | 国产精品欧美一区二区 | cao在线视频 | 捆绑最紧bdsm视频 | 国产在线18 | 岛国av电影在线观看 | 日本一本在线视频 | 成人av中文解说水果派 | 四虎www| 天堂在线视频免费 | 影音先锋 日韩 | 国产精品熟妇人妻g奶一区 a少妇 | 四虎激情| 在线理论视频 | 精品国产一区二区三区日日嗨 | 亚洲欧美中文字幕 | 四虎成人精品在永久免费 | 樱花草涩涩www在线播放 | 亚洲色图欧美视频 | 99久久影院 | 91国内精品久久久久 | 欧美一级片免费观看 | 欧美日韩亚 | 欧美日韩国产专区 | 亚洲天堂免费视频 | 成人乱码一区二区三区av | 中文字幕第66页 | 国产普通话bbwbbwbbw | 爱的色放韩国电影 | 青青久久国产 | 亚洲一级Av无码毛片久久精品 | va视频在线 | 青青在线视频观看 | 国产精品麻豆一区二区 | 欧美黄大片| 伊人tv| 日皮在线观看 | 九一亚洲精品 | 五月天欧美 | 国产黄色小视频在线观看 | 国产午夜视频 | 中国一级免费毛片 | 日韩视频在线免费观看 | 九色在线视频 | 一级bbbbbbbbb毛片 | 嫩模一区二区三区 | 毛片视| av资源新版在线天堂 | 波多野结衣福利视频 | 欧美激情电影一区二区 | 中文字幕 日韩有码 | 鲁鲁狠狠狠7777一区二区 | 97视频一区二区三区 | 午夜视频在线免费看 | 18xxxx日本| 用舌头去添高潮无码视频 | 免费福利在线视频 | 久久国产精品-国产精品 | 激情综合网五月天 | 激情久久五月天 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 欧美精品一区在线观看 | 第四色男人天堂 | 女的高潮流时喷水图片大全 | 丁香婷婷激情 | 99re6在线 | 亚洲我射| 国产精品一线天 | 色偷偷资源网 | 久久久久久国产精品视频 | 黄色资源网 | eeuss鲁片一区二区三区在线观看 | 一区二区三区免费看视频 | 疯狂做受xxxx国产 | 少妇喷白浆| 久久免费高清视频 |