單元測試 dbunit資料集的選擇與使用

2021-06-29 09:17:00 字數 2520 閱讀 2702

對於增刪改方法的單元測試,推薦使用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 四種模...