mysql - Java單元測(cè)試如何測(cè)試修改數(shù)據(jù)庫部分的代碼?
問題描述
對(duì)于各種數(shù)據(jù)庫的CRUD操作,都要寫對(duì)應(yīng)的單元測(cè)試。對(duì)于查找這樣并沒有太多的問題,但是對(duì)于增刪改的話這樣就會(huì)有問題,由于代碼是在生產(chǎn)環(huán)境中運(yùn)行,所以不能真的進(jìn)行真的進(jìn)行改動(dòng)。
現(xiàn)在我想到的是方案是另外創(chuàng)建一個(gè)用于開發(fā)的數(shù)據(jù)與生產(chǎn)環(huán)境中的數(shù)據(jù)庫分開,但是這樣的話有些麻煩。請(qǐng)問在企業(yè)真實(shí)的開發(fā)流程中對(duì)于要對(duì)數(shù)據(jù)庫修改的代碼的單元測(cè)試一般都是怎樣做的?
我簡(jiǎn)單的看了一下mockito的介紹,好像沒有找到好的解決方案。大家能否給一下建議或者推薦一下這方面的資料。
注釋:在IBM社區(qū)看到這樣一段對(duì)于單元測(cè)試的介紹:
單元測(cè)試要易于執(zhí)行,單元測(cè)試的執(zhí)行不應(yīng)該需要配置等繁瑣操作就可以運(yùn)行。如果單元測(cè)試代碼包含訪問數(shù)據(jù)庫、網(wǎng)絡(luò)等,這個(gè)測(cè)試就不是真正的單元測(cè)試。
一種說法是單元測(cè)試是不允許連接真實(shí)的數(shù)據(jù)庫的,所以一切數(shù)據(jù)庫操作都要mock,那么數(shù)據(jù)庫部分的代碼到底應(yīng)該怎么測(cè)試?
問題解答
回答1:可以使用h2完成單元測(cè)試。一般企業(yè)級(jí)開發(fā)都有自己的測(cè)試環(huán)境的,直接連數(shù)據(jù)庫測(cè)試也沒太大的問題
回答2:你這個(gè)不是單元測(cè)試Unit Test,是集成測(cè)試Integration Test
不應(yīng)該使用h2等內(nèi)存數(shù)據(jù)庫,因?yàn)檫@些數(shù)據(jù)庫的語法、特性和你生產(chǎn)數(shù)據(jù)庫不同,很可能會(huì)導(dǎo)致測(cè)試失敗
如果你用Spring,則參考Spring官方文檔中關(guān)于Integration Test章節(jié)
回答3:用內(nèi)存數(shù)據(jù)庫來解決該問題。引入內(nèi)存數(shù)據(jù)庫之后需要在代碼中管理ddl腳本和必要的初始化數(shù)據(jù)dml腳本,每次跑單元測(cè)試時(shí)啟動(dòng)內(nèi)存數(shù)據(jù)庫,刷ddl和dml腳本,然后執(zhí)行單元測(cè)試邏輯,推薦管理數(shù)據(jù)庫腳本工具有flyway和liquibase
相關(guān)文章:
1. mac里的docker如何命令行開啟呢?2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. docker - 各位電腦上有多少個(gè)容器?。咳萜饕欢啵约憾几慊炝?,咋辦呢?4. 關(guān)于docker下的nginx壓力測(cè)試5. docker容器呢SSH為什么連不通呢?6. nignx - docker內(nèi)nginx 80端口被占用7. 如何解決Centos下Docker服務(wù)啟動(dòng)無響應(yīng),且輸入docker命令無響應(yīng)?8. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????9. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。10. docker start -a dockername 老是卡住,什么情況?

網(wǎng)公網(wǎng)安備