mysql - Java單元測試如何測試修改數據庫部分的代碼?
問題描述
對于各種數據庫的CRUD操作,都要寫對應的單元測試。對于查找這樣并沒有太多的問題,但是對于增刪改的話這樣就會有問題,由于代碼是在生產環境中運行,所以不能真的進行真的進行改動。
現在我想到的是方案是另外創建一個用于開發的數據與生產環境中的數據庫分開,但是這樣的話有些麻煩。請問在企業真實的開發流程中對于要對數據庫修改的代碼的單元測試一般都是怎樣做的?
我簡單的看了一下mockito的介紹,好像沒有找到好的解決方案。大家能否給一下建議或者推薦一下這方面的資料。
注釋:在IBM社區看到這樣一段對于單元測試的介紹:
單元測試要易于執行,單元測試的執行不應該需要配置等繁瑣操作就可以運行。如果單元測試代碼包含訪問數據庫、網絡等,這個測試就不是真正的單元測試。
一種說法是單元測試是不允許連接真實的數據庫的,所以一切數據庫操作都要mock,那么數據庫部分的代碼到底應該怎么測試?
問題解答
回答1:可以使用h2完成單元測試。一般企業級開發都有自己的測試環境的,直接連數據庫測試也沒太大的問題
回答2:你這個不是單元測試Unit Test,是集成測試Integration Test
不應該使用h2等內存數據庫,因為這些數據庫的語法、特性和你生產數據庫不同,很可能會導致測試失敗
如果你用Spring,則參考Spring官方文檔中關于Integration Test章節
回答3:用內存數據庫來解決該問題。引入內存數據庫之后需要在代碼中管理ddl腳本和必要的初始化數據dml腳本,每次跑單元測試時啟動內存數據庫,刷ddl和dml腳本,然后執行單元測試邏輯,推薦管理數據庫腳本工具有flyway和liquibase
相關文章:
1. html5 - 最近在自學react 求一個react表單提交的例子2. 老師您好!我有一個問題、3. javascript - jq 上傳圖片成功后添加一個新的上傳框時出現問題4. 網站上有個圖標改不了了 求幫忙 是用svg寫的5. 我和老師的代碼對照了幾遍沒發現問題,但是瀏覽器打開就有問題了,求解6. python django工程上傳一張照片調用python方法時報錯,請問如何處理?7. python - Django ManyToManyField 字段數據在 admin后臺 顯示不正確,這是怎么回事?8. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風格檢查怎么辦。。。9. python - angular route 與 django urls 沖突怎么解決?10. mysql - 千萬數據 分頁,當偏移量 原來越大時,怎么優化速度
