Spring的集成測試###
單位測試和集成測試,我想大家都做過,一般情況下锻离,一般邏輯且不需要操作數(shù)據(jù)庫的情況比較適合于單位測試了氓涣。而對于一個(gè)數(shù)據(jù)庫應(yīng)用來說耕挨,集成測試可能比單元測試更重要,你可以想象,一個(gè)互聯(lián)網(wǎng)應(yīng)用,不是增修數(shù)據(jù)劳秋,就是查詢數(shù)據(jù)了,那么驗(yàn)證操作在數(shù)據(jù)記錄上的影響就更為需要胖齐。如果在的應(yīng)用中使用了spring玻淑,那么就可以利用spring集成測試框架了,其實(shí)它所做的工作就是加載配置文件并配置其中相關(guān)的信息呀伙,其中也包括數(shù)據(jù)源等补履,其次在驗(yàn)證完成之后,回滾對數(shù)據(jù)表的操縱剿另,當(dāng)然你也可以手動(dòng)的設(shè)置為不回滾箫锤,總之,spring的測試框架大大簡化集成測試所要做的工作雨女。
我的問題###
spring解決了我們集成測試當(dāng)中的大部分問題麻汰,但是在有些情況下,還是非常的麻煩戚篙,主要在兩個(gè)方面無法減少測試的工作量,一是準(zhǔn)備測試數(shù)據(jù)(先于測試插入數(shù)據(jù)表中的數(shù)據(jù))溺职,可能針對于一個(gè)功能的一種場景的測試岔擂,準(zhǔn)備的測試數(shù)據(jù)可能就涉及到十幾,幾十張表浪耘,數(shù)據(jù)記錄就達(dá)到幾十乱灵,幾百條。其二七冲,需要驗(yàn)證的數(shù)據(jù)項(xiàng)非常多(驗(yàn)證操作在數(shù)據(jù)記錄上的影響)痛倚,你可能需要驗(yàn)證十幾張,幾十張表中的若干個(gè)字段的數(shù)據(jù)正確性澜躺,所以蝉稳,在這種情況下抒蚜,一個(gè)功能一個(gè)分支的測試就可能涉及到上百行代碼,可以想象耘戚,要是這個(gè)功能多幾個(gè)分支嗡髓,測試代碼迅速膨脹,而且這樣的代碼還需要維護(hù)(要知道測試的代碼也是需要維護(hù)了收津,極有可能因?yàn)楸斫Y(jié)構(gòu)或者程序邏輯發(fā)生的變化而需要變更測試代碼) 饿这,那么遇到這樣的情況,有什么辦法呢撞秋?
我的解決方法###
針對上面的測試窘境长捧,主要是要解決兩個(gè)方面的問題,第一吻贿,準(zhǔn)備測試數(shù)據(jù)串结;第二,驗(yàn)證數(shù)據(jù)項(xiàng)廓八。其實(shí)這樣兩個(gè)問題歸為一個(gè)問題就準(zhǔn)備數(shù)據(jù)和驗(yàn)證項(xiàng)太多了奉芦,導(dǎo)致測試代碼膨脹,解決這個(gè)問題的辦法就是把準(zhǔn)備測試數(shù)據(jù)和驗(yàn)證項(xiàng)都放到外部文件中去剧蹂,比如xml文件了声功,請看下面的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite>
<case enable="true">
<desc>測試用例描敘</desc>
<init>
<insert>初始化SQL</insert>
<insert>初始化SQL</insert>
</init>
<assert>
<select>查詢SQL</select>
<props>
<prop key="查詢SQL的選擇列">期望值</prop>
<prop key="查詢SQL的選擇列">期望值</prop>
</props>
</assert>
</case>
</suite>
我們把測試的初始化腳本,斷言的SQL以及期望值都放在xml文件中宠叼,其中case代表功能的一個(gè)邏輯分支先巴。如果這些東西都放在外部文件的時(shí)候,那么測試就只剩下了三步:第一步冒冬,讀取xml文件伸蚯;第二步,調(diào)用需要測試功能简烤;第三步剂邮,調(diào)用斷言方法,這就是需要我們的測試代碼了横侦,其中第一步和第三步都是所有測試方法所共有挥萌,這樣是不是大大簡化的代碼量呢,另外由于初始化腳本枉侧,斷言SQL引瀑,期望值都放在外部文件中,就更便于測試代碼的維護(hù)了榨馁。
你認(rèn)為我的方法如何呢憨栽?你有沒有更好的方法,歡迎各位給出你的意見。