DbUnit鍏ラ棬瀹炴垬
鐩鎬俊鍋氳繃鍗曞厓嫻嬭瘯鐨勪漢閮戒細瀵笿Unit闈炲父鐨勭啛鎮変簡錛屼粖澶╄浠嬬粛鐨凞bUnit(http://dbunit.sourceforge.net/)鍒欐槸涓撻棬閽堝鏁版嵁搴撴祴璇曠殑瀵笿Unit鐨勪竴涓墿灞曪紝瀹冨彲浠ュ皢嫻嬭瘯瀵硅薄鏁版嵁搴撶疆浜庝竴涓祴璇曡疆鍥炰箣闂寸殑鐘舵併傞壌浜庣洰鍓嶅浗鍐呬粙緇岲bUnit鐨勭郴緇熸暀紼嬫瘮杈冨皯瑙侊紝鏈枃灝嗗垎浠庣悊璁哄拰瀹炰緥涓や釜鏂歸潰甯︿綘棰嗙暐DbUnit鐨勭簿褰╀笘鐣屻?br />
DbUnit璁捐鐞嗗康
鐔熸倝鍗曞厓嫻嬭瘯鐨勫紑鍙戜漢鍛橀兘鐭ラ亾錛屽湪瀵規暟鎹簱榪涜鍗曞厓嫻嬭瘯鏃跺欙紝閫氬父閲囩敤鐨勬柟妗堟湁榪愮敤妯℃嫙瀵硅薄(mock objects)鍜宻tubs涓ょ銆傞氳繃闅旂鍏寵仈鐨勬暟鎹簱璁塊棶綾伙紝姣斿JDBC鐨勭浉鍏蟲搷浣滅被錛屾潵杈懼埌瀵規暟鎹簱鎿嶄綔鐨勬ā鎷熸祴璇曘傜劧鑰屾煇浜涚壒孌婄殑緋葷粺錛屾瘮濡傚埄鐢ㄤ簡EJB鐨凜MP(container-managed persistence)鐨勭郴緇燂紝鏁版嵁搴撶殑璁塊棶瀵硅薄鏄湪鏈搴曞眰鑰屼笖寰堥殣钄界殑錛岄偅涔堣繖涓ょ瑙e喅鏂規瀵硅繖浜涚郴緇熷氨鏄懼緱鍔涗笉浠庡績浜嗐?br />
DBUnit鐨勮璁$悊蹇靛氨鏄湪嫻嬭瘯涔嬪墠錛屽浠芥暟鎹簱錛岀劧鍚庣粰瀵硅薄鏁版嵁搴撴鍏ユ垜浠渶瑕佺殑鍑嗗鏁版嵁錛屾渶鍚庯紝鍦ㄦ祴璇曞畬姣曞悗錛岃鍏ュ浠芥暟鎹簱錛屽洖婧埌嫻嬭瘯鍓嶇殑鐘舵侊紱
鑰屼笖鍙堝洜涓篋BUnit鏄JUnit鐨勪竴縐嶆墿灞曪紝寮鍙戜漢鍛樺彲浠ラ氳繃鍒涘緩嫻嬭瘯鐢ㄤ緥浠g爜錛屽湪榪欎簺嫻嬭瘯鐢ㄤ緥鐨勭敓鍛藉懆鏈熷唴鏉ュ鏁版嵁搴撶殑鎿嶄綔緇撴灉榪涜姣旇緝銆?br />
DbUnit嫻嬭瘯鍩烘湰姒傚康鍜屾祦紼?br />
鍩轟簬DbUnit 鐨勬祴璇曠殑涓昏鎺ュ彛鏄疘DataSet銆侷DataSet浠h〃涓涓垨澶氫釜琛ㄧ殑鏁版嵁銆?br />
鍙互灝嗘暟鎹簱妯″紡鐨勫叏閮ㄥ唴瀹硅〃紺轟負鍗曚釜IDataSet 瀹炰緥銆傝繖浜涜〃鏈韓鐢盜table 瀹炰緥鏉ヨ〃紺恒?br />
IDataSet 鐨勫疄鐜版湁寰堝錛屾瘡涓涓兘瀵瑰簲涓涓笉鍚岀殑鏁版嵁婧愭垨鍔犺澆鏈哄埗銆傛渶甯哥敤鐨勫嚑縐?IDataSet瀹炵幇涓猴細
FlatXmlDataSet錛氭暟鎹殑綆鍗曞鉤闈㈡枃浠?XML 琛ㄧず
QueryDataSet錛氱敤 SQL 鏌ヨ鑾峰緱鐨勬暟鎹?
DatabaseDataSet錛氭暟鎹簱琛ㄦ湰韜唴瀹圭殑涓縐嶈〃紺?
XlsDataSet 錛氭暟鎹殑excel琛ㄧず
涓鑸岃█錛屼嬌鐢―bUnit榪涜鍗曞厓嫻嬭瘯鐨勬祦紼嬪涓嬶細
1 鏍規嵁涓氬姟錛屽仛濂芥祴璇曠敤鐨勫噯澶囨暟鎹拰棰勬兂緇撴灉鏁版嵁錛岄氬父鍑嗗鎴恱ml鏍煎紡鏂囦歡銆?br />
2 鍦╯etUp()鏂規硶閲岃竟澶囦喚鏁版嵁搴撲腑鐨勫叧鑱旇〃銆?br />
3 鍦╯etUp()鏂規硶閲岃竟璇誨叆鍑嗗鏁版嵁銆?br />
4 瀵規祴璇曠被鐨勫搴旀祴璇曟柟娉曡繘琛屽疄瑁?鎵ц瀵硅薄鏂規硶錛屾妸鏁版嵁搴撶殑瀹為檯鎵ц緇撴灉鍜岄鎯崇粨鏋滆繘琛屾瘮杈冦?br />
5 鍦╰earDown()鏂規硶閲岃竟,鎶婃暟鎹簱榪樺師鍒版祴璇曞墠鐘舵併?br />
DbUnit寮鍙戝疄渚?br />
涓嬮潰閫氳繃涓涓疄渚嬫潵璇存槑DbUnit鐨勫疄闄呰繍鐢ㄣ?br />
瀹炰緥鍑嗗
姣斿鏈変竴涓鐢熻〃[student]錛岀粨鏋勫涓嬶細
id char(4) pk 瀛﹀彿
name char(50) 濮撳悕
sex char(1) 鎬у埆
birthday date 鍑虹敓鏃ユ湡
鍑嗗鏁版嵁濡備笅錛?br />
id name sex birthday
0001 緲佷粩 m 1979-12-31
0002 鐜嬬繝鑺?f 1982-08-09
嫻嬭瘯瀵硅薄綾諱負StudentOpe.java錛岄噷杈規湁2涓柟娉曪細
findStudent(String id) :鏍規嵁涓婚敭id鎵捐褰?br />
addStudent(Student student) 錛氭坊鍔犱竴鏉¤褰?br />
鍦ㄦ祴璇昦ddStudent鏂規硶鏃跺欙紝鎴戜滑鍑嗗娣誨姞濡備笅涓鏉℃暟鎹?br />
id name sex birthday
0088 鐜嬭蟲湹 m 1982-01-01
閭d箞鍦ㄦ墽琛岃鏂規硶鍚庯紝鏁版嵁搴撶殑student琛ㄩ噷鐨勬暟鎹槸榪欐牱鐨勶細
id name sex birthday
0001 緲佷粩 m 1979-12-31
0002 鐜嬬繝鑺?f 1982-08-09
0088 鐜嬭蟲湹 m 1982-01-01
鐒跺悗鎴戜滑璇存槑濡備綍瀵硅繖2涓柟娉曡繘琛屽崟鍏冩祴璇曘?br />
瀹炰緥灞曞紑
1 鎶婂噯澶囨暟鎹拰棰勬兂鏁版嵁杞崲鎴恱ml鏂囦歡
student_pre.xml
<?xml version='1.0' encoding="gb2312"?>
<dataset>
<student id="0001" name="緲佷粩" sex="m" birthday="1979-12-31"/>
<student id="0002" name="鐜嬬繝鑺? sex="f" birthday="1982-08-09"/>
</dataset>
student_exp.xml
<?xml version='1.0' encoding="gb2312"?>
<dataset>
<student id="0001" name="緲佷粩" sex="m" birthday="1979-12-31"/>
<student id="0002" name="鐜嬬繝鑺? sex="f" birthday="1982-08-09"/>
<student id="0088" name="鐜嬭蟲湹" sex="m" birthday="1982-01-01"/>
</dataset>
2 瀹炶setUp鏂規硶錛岃緇嗚浠g爜娉ㄩ噴銆?br />
protected void setUp() {
IDatabaseConnection connection =null;
try{
super.setUp();
//鏈緥浣跨敤postgresql鏁版嵁搴?
Class.forName("org.postgresql.Driver");
//榪炴帴DB
Connection conn=DriverManager.getConnection("jdbc:postgresql:testdb.test","postgres","postgres");
//鑾峰緱DB榪炴帴
connection =new DatabaseConnection(conn);
//瀵規暟鎹簱涓殑鎿嶄綔瀵硅薄琛╯tudent榪涜澶囦喚
QueryDataSet backupDataSet = new QueryDataSet(connection);
backupDataSet.addTable("student");
file=File.createTempFile("student_back",".xml");//澶囦喚鏂囦歡
FlatXmlDataSet.write(backupDataSet,new FileOutputStream(file));
//鍑嗗鏁版嵁鐨勮鍏?br />
IDataSet dataSet = new FlatXmlDataSet( new FileInputStream("student_pre.xml"));
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}
}
3 瀹炶嫻嬭瘯鏂規硶錛岃緇嗚浠g爜娉ㄩ噴銆?br />
*媯绱㈢被鏂規硶錛屽彲浠ュ埄鐢╝ssertEquals()鏂規硶錛屾嬁琛ㄧ殑瀛楁榪涜姣旇緝銆?br />
// findStudent
public void testFindStudent() throws Exception{
//鎵цfindStudent鏂規硶
StudentOpe studentOpe=new StudentOpe();
Student result = studentOpe.findStudent("0001");
//棰勬兂緇撴灉鍜屽疄闄呯粨鏋滅殑姣旇緝
assertEquals("緲佷粩",result.getName());
assertEquals("m",result.getSex());
assertEquals("1979-12-31",result.getBirthDay());
}
*鏇存柊錛屾坊鍔狅紝鍒犻櫎絳夋柟娉曪紝鍙互鍒╃敤Assertion.assertEquals()鏂規硶錛屾嬁琛ㄧ殑鏁翠綋鏉ユ瘮杈冦?br />
public void testAddStudent() throws Exception{
//鎵цaddStudent鏂規硶
StudentOpe studentOpe=new StudentOpe();
//琚拷鍔犵殑璁板綍
Student newStudent = new Student("0088","鐜嬭蟲湹","m","1982-01-01");
//鎵ц榪藉姞鏂規硶
Student result = studentOpe.addStudent(newStudent);
//棰勬兂緇撴灉鍜屽疄闄呯粨鏋滅殑姣旇緝
IDatabaseConnection connection=null;
try{
//棰勬湡緇撴灉鍙栧緱
IDataSet expectedDataSet = new FlatXmlDataSet(new FileInputStream("student_exp.xml"));
ITable expectedTable = expectedDataSet.getTable("student");
//瀹為檯緇撴灉鍙栧緱
Connection conn=getConnection();
connection =new DatabaseConnection(conn);
IDataSet databaseDataSet = connection.createDataSet();
ITable actualTable = databaseDataSet.getTable("student");
//姣旇緝
Assertion.assertEquals(expectedTable, actualTable);
}finally{
if(connection!=null) connection.close();
}
}
*濡傛灉鍦ㄦ暣浣撴瘮杈冭〃鐨勬椂鍊欙紝鏈変釜鍒瓧孌典笉闇瑕佹瘮杈冿紝鍙互鐢―efaultColumnFilter.excludedColumnsTable()鏂規硶錛?br />
灝嗘寚瀹氬瓧孌電粰鎺掗櫎鍦ㄦ瘮杈冭寖鍥翠箣澶栥傛瘮濡備笂渚嬩腑涓嶉渶瑕佹瘮杈僢irthday榪欎釜瀛楁鐨勮瘽錛岄偅涔堝彲浠ュ涓嬩唬鐮佹墍紺鴻繘琛屽鐞嗭細
ITable filteredExpectedTable = DefaultColumnFilter.excludedColumnsTable(expectedTable, new String[]{"birthday"});
ITable filteredActualTable = DefaultColumnFilter.excludedColumnsTable(actualTable,new String[]{"birthday"});
Assertion.assertEquals(filteredExpectedTable, filteredActualTable);
4 鍦╰earDown()鏂規硶閲岃竟,鎶婃暟鎹簱榪樺師鍒版祴璇曞墠鐘舵?br />
protected void tearDown() throws Exception{
IDatabaseConnection connection =null;
try{
super.tearDown();
Connection conn=getConnection();
connection =new DatabaseConnection(conn);
IDataSet dataSet = new FlatXmlDataSet(file);
DatabaseOperation.CLEAN_INSERT.execute(connection,dataSet);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(connection!=null) connection.close();
}catch(SQLException e){}
}
}
鏈鍚?br />
鏃犵枒錛屼嬌鐢―bUnit鑳藉鏋佸ぇ鐨勬彁楂樻暟鎹簱嫻嬭瘯鐨勬晥鐜囷紝甯屾湜閫氳繃鏈枃鑳藉璁╂偍鎺屾彙榪欎竴鏁版嵁搴撴祴璇曠殑鍒╁櫒

]]>