protected void setUp() throws Exception
{
DataSource dataSource = getDataSource();
Connection connection = dataSource.getConnection();
IDatabaseConnection dbUnitCon
= new DatabaseConnection(connection, "SYSTEM");
if(getDataSet() != null)
{
try
{
getSetUpOperation().execute(dbUnitCon, getDataSet());
}
finally
{
if(connection!= null)
connection.close();
}
}
}
protected void tearDown() throws Exception
{
DataSource dataSource = getDataSource();
Connection connection = dataSource.getConnection();
IDatabaseConnection dbUnitCon
= new DatabaseConnection(connection, "SYSTEM");
if(getDataSet()!= null)
{
try
{
getTearDownOperation().execute(dbUnitCon,getDataSet());
}
finally
{
if(connection!= null)
connection.close();
}
}
}
支持事務(wù)回滾
雖然DBUnit提供了一些方法讓我們可以在測試開始和結(jié)束時清理數(shù)據(jù)庫,但是有時候依然不能滿足需求,比如在上面的代碼中,我們在執(zhí)行階段插入了一條記錄(見testCreateAccount方法),這種不是在種子文件中的額外數(shù)據(jù),測試結(jié)束后除非在tearDown中返回DatabaseOperation.DELETE_ALL,否則是不會被自動刪除的,可是如果刪除全部數(shù)據(jù),那么又有可能刪掉了不希望刪掉的數(shù)據(jù)。Spring提供了一個AbstractTransactionalDataSourceSpringContextTests測試類,這個類可以在測試結(jié)束后回滾數(shù)據(jù)庫,可是DBUnit沒有提供類似的機制,所以我們要進(jìn)一步手工擴(kuò)展測試用例,以加入類似功能。
修改ApplicationContext.xml
首先,修改Spring的配置文件ApplicationContext.xml,加入以下配置:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>