DbUnit是一個可以讓我們在測試開始前初始化我們的數據庫,例如準備我們的數據,然后在測試結束后也可以回滾我們的數據庫(不是自動進行的,需要手工編碼),dbUnit的結構基于Jnit,簡單的使用必須要繼承DatabaseTestCase類,但是我們可以使用編碼的方法調用他,完全可以在Spring環境下使用,然后在TestNG中調用。
我寫了一個DbunitTemplate類做了一個小小的封裝。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
public class DBUnitTemplate {
private BasicDataSource dataSource;
private IDatabaseConnection connection;
public DBUnitTemplate(){
}
public void setDataSource(BasicDataSource dataSource) throws SQLException {
this.dataSource = dataSource;
//”schema”是你數據庫的schema的名字,試驗的時候老是拋出AmbiguousTableNameException,后來在Dbunit的官方FAQ中找到,必須要用schema,而且如果你用的Oracle,必須要大寫
connection = new DatabaseConnection(this.dataSource.getConnection(),"schema");
}
public void execute(String path,DatabaseOperation oper) throws FileNotFoundException, IOException, DatabaseUnitException, SQLException{
IDataSet dataset = new FlatXmlDataSet(new FileInputStream(path));
oper.execute(connection,dataset);
}
}
然后在Spring文件中配置它
<bean id="dbUnitTemplate" class="DBUnitTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="maxActive">
<value>${maxActive}</value>
</property>
<property name="maxWait">
<value>${maxWait}</value>
</property>
<property name="maxIdle">
<value>${maxIdle}</value>
</property>
</bean>
只要將dataSource注入到DBUnitTemplate中就可以了
然后我們就可以在TestNG的配置方法中對數據庫進行操作了
public class TestDAO {
@Configuration(beforeTestMethod=true)
public void configDB()
throws FileNotFoundException, IOException, DatabaseUnitException, SQLException{
//得到Spring容器,TestConfiguration是自己寫的在測試開始前初始化Spring容器的類
ApplicationContext context = TestConfiguration.getContext();
//從容器中得到DBUnitTemplate
DBUnitTemplate dbtemp =
(DBUnitTemplate)context.getBean(“dbUnitTemplate”);
//執行數據庫操作,下面將DataSet中的數據插入到數據庫中
dbtemp.execute("dataset.xml",--------à你的DataSet的路徑
DatabaseOperation.INSERT); --------à你要執行的操作,常用的幾種(INSERT,DELETE,UPDATE,CLEAN_INSERT,SELETE_ALL)
}
@Test
public void test(){
//下面可以測試你的類了
}
}
應該比較簡單了,另外Spring容器本身就是要啟動的,并不會造成額外的負擔,這樣就不要硬編碼連接數據庫了,但是DBUnit還是讓人不是很滿意
1. DataSet的管理還是很煩,并不比管理sql語句好多少
2. 沒法查詢數據庫,我的想法是如果我在測試中對數據庫做了某項操作,(例如新增或刪除),可以被detect到,然后判斷和我預期的結果是不是一致。
可是沒辦法,也沒有別的工具好用的。
posted on 2005-12-31 12:27
fanta 閱讀(6143)
評論(2) 編輯 收藏 所屬分類:
Java