對於增刪改方法的單元測試,推薦使用dbunit+springtestdbunit的方式編寫單元測試。
我們使用connection.createdataset()生成idataset物件,利用idataset物件生成我們需要的資料集檔案,
dbunit支援多種資料集,檢視dbunit.jar原始碼可以看到,在org.dbunit.dataset包下,有生成資料集的工具
類,dbunit支援以下幾種常用的資料集:
匯出資料集可參考下面**,(除了匯出資料集,我們還可以匯出表結構的dtd檔案)
connection jdbcconnection = drivermanager.getconnection(
"jdbc:mysql://localhost:3306/database?useunicode=true&characterencoding=utf-8",
"username", "password");
idatabaseconnection connection = new databaseconnection(jdbcconnection);
connection.getconfig().setproperty(databaseconfig.property_escape_pattern , "`?`");
idataset fulldataset = connection.createdataset();
// write dtd file
flatdtddataset.write(fulldataset, new fileoutputstream("d:/dev/source/test.dtd"));
// write flatxml database export
flatxmldataset.write(fulldataset, new fileoutputstream("d:/dev/source/full_flat.xml"));
// write xml database export
xmldataset.write(fulldataset, new fileoutputstream("d:/dev/source/full_xml.xml"));
//write csv database export
csvdatasetwriter.write(fulldataset,new file("d:/dev/source/full_csv"));
//write excel database export
xlsdataset.write(fulldataset, new fileoutputstream("d:/dev/source/full_excel.xls"));
dbunit預設使用的資料集是flatxmldataset,springtestdbunit基於dbunit,所以也是如此,
springtestdbunit預設使用的是com.github.springtestdbunit.dataset.flatxmldatasetloader進行資料集
flatxmldataset對應的xml例如:
name="jade"
age="30"/>
name="kirin"
age="31"
location="beijing"/>
dataset>
使用這種資料集有乙個問題:如果資料庫中某一條欄位為null,在flat xml中將不會顯示該attribute。
flatxmldataset用xml檔案中該表的第一行資料來制定表的結構。因此,如果資料庫中某個字段所有記錄不
都為null,但恰巧第一條記錄為null,那麼這個字段插入後將會全部為空,因為第一行指定的表結構中沒有這
個字段。例如上面的xml檔案,第一條的location為null,第二條有值,但是,匯入資料庫後,資料庫中兩
條記錄的location欄位全部為null。有很多人說,只要把不為空的記錄放到第一行就可以了,我覺得這並不
是最好的解決辦法,因為這需要我們費力去尋找一條所有欄位都有值的記錄,並且如果表裡沒有這種記錄
呢,比如表裡有這樣兩個字段,乙個欄位為空另乙個欄位就一定有值,另乙個欄位為空,這個欄位才有值,
如果存在這種互異的字段,那麼資料集的匯入便完全無法正確的進行了,使用flat xml插入後的資料一定有一
列全部為空。解決辦法是不使用預設的flatxml資料集,可以嘗試使用其他三種,我們這裡使用xmldataset
演示,其他兩種,讀者可自行測試。
使用xmldataset生成的xml檔案如下所示:
name="person">
namecolumn>
agecolumn>
locationcolumn>
jadevalue>
30value>
row>
kirinvalue>
31value>
beijingvalue>
row>
table>
dataset>
附: 單元測試動態引導程式集
在vs2008的單元測試下取程式集所在目錄有點彆扭。system.reflection.assembly.getexecutingassembly location得到的乙個臨時的目錄,沒有引用到測試專案的dll不會拷貝到該臨時目錄。換言之如果你想動態載入某些類,請先引用到測試專案,無言 只好這樣處...
單元測試 單元測試編寫的原則
公司要求提公升單元測試的質量,其中我作為方案和推動的主導,對開發過程中的單元測試,有了一些思考和總結 單元測試編寫的目的,是面向計算機特性的,基於函式的in out,所以單元測試的好幫手就是斷言,通過不斷的構造輸出並對結果進行斷言,我們就可以針對乙個物件以及它的函式,構建出充足的用例去包裹它,以期望...
單元測試,資料儲存
1 單元測試 2 debug 設定斷點,追蹤每一步,其中關於快捷鍵的使用 f5 f6 進入某個方法 ctrl r 跳到某一行 f8 結束 3 資料儲存 採用mvc 使用txt 1 單元測試 2 各種io流操作 3 openfileoutput txt context.mode private 四種模...