spring-mock + dbutil 用來測試資料庫操作

biqing0427發表於2008-01-02
需要的jar 1.spring-mock.jar 2.dbunit-2.2.jar 3.junit.jar[@more@]

大概流程:
1.用dbunit建立初始的測試資料。
2.用spring-mock 維護測試過程中的資料會滾,這樣可以保證測試後資料庫保持原狀態。
3.用junit架構測試。
4.用dbunit銷燬初始測試資料。

詳細過程:
建立測試資料:

dbunit採用配置檔案方式,將測試資料放入.xml檔案中,形式非常簡單:



列名1 = 值1
列名2 = 值2
列名3 = 值3
列名4 = 值4
……
……
/>


程式將上面資料載入到資料庫
import org.dbunit.IDatabaseTester;
import org.dbunit.JdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

protected IDataSet getDataSet() throws Exception {
File f = new File(".");
String filePath = f.getAbsolutePath().substring(0,f.getAbsolutePath().length()-1)+"confdbdataSet4mock.xml";
return new FlatXmlDataSet(new FileInputStream(new File(filePath)));
}

初始資料:

databaseTester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",
"jdbc:mysql://127.0.0.1:3306/datetable", "sa", "sa");
IDataSet dataSet = getDataSet();//匯入初始資料
databaseTester.setDataSet(dataSet);
databaseTester.onSetup();

銷燬資料:
databaseTester.setTearDownOperation(DatabaseOperation.DELETE);
databaseTester.onTearDown();

下面看看spring-mock:
1.封裝了junit的testcase:
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
這個類起到的作用:
a.繼承testcase
b.讀取spring-bean.xml檔案中的事務處理,將監聽所有事務,然後在測試結束後,進行事務會滾,這樣保證在測試過程中產生的資料在結束後不會儲存到資料庫中。
c.override getConfigLocations()這個函式,將spring讀取bean操作進行封裝。

public abstract class SpringDAOTestCase extends AbstractTransactionalDataSourceSpringContextTests {
protected String[] getConfigLocations() {
File f = new File(".");
String filePath ="file:" + f.getAbsolutePath().substring(0,f.getAbsolutePath().length()-1)+"confdbspring-context-db.xml";
return new String[] { filePath };
}
}

public class DaoTest4Mock extends SpringDAOTestCase {
protected void onSetUpInTransaction() throws Exception {
super.onSetUpInTransaction();
/*
dbunit 初始化資料
*/
}

protected void onTearDownInTransaction() {
/*
dbunit 釋放資料
*/
}

public void testInsert() {
………………
}

public void testUpdate() {
………………
}

public void testDelete() {
………………
}

public void testSelect() {
………………
}
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879276/viewspace-996348/,如需轉載,請註明出處,否則將追究法律責任。

相關文章