posts - 32,comments - 75,trackbacks - 0

          DbUnit是一個(gè)可以讓我們在測試開始前初始化我們的數(shù)據(jù)庫,例如準(zhǔn)備我們的數(shù)據(jù),然后在測試結(jié)束后也可以回滾我們的數(shù)據(jù)庫(不是自動進(jìn)行的,需要手工編碼),dbUnit的結(jié)構(gòu)基于Jnit,簡單的使用必須要繼承DatabaseTestCase類,但是我們可以使用編碼的方法調(diào)用他,完全可以在Spring環(huán)境下使用,然后在TestNG中調(diào)用。

          我寫了一個(gè)DbunitTemplate類做了一個(gè)小小的封裝。

          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”是你數(shù)據(jù)庫的schema的名字,試驗(yàn)的時(shí)候老是拋出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的配置方法中對數(shù)據(jù)庫進(jìn)行操作了

          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”);

               //執(zhí)行數(shù)據(jù)庫操作,下面將DataSet中的數(shù)據(jù)插入到數(shù)據(jù)庫中

              dbtemp.execute("dataset.xml",--------à你的DataSet的路徑

                        DatabaseOperation.INSERT); --------à你要執(zhí)行的操作,常用的幾種(INSERTDELETEUPDATECLEAN_INSERT,SELETE_ALL

              }

             

              @Test

              public void test(){

                  //下面可以測試你的類了

              }

          }

          應(yīng)該比較簡單了,另外Spring容器本身就是要啟動的,并不會造成額外的負(fù)擔(dān),這樣就不要硬編碼連接數(shù)據(jù)庫了,但是DBUnit還是讓人不是很滿意

          1.  DataSet的管理還是很煩,并不比管理sql語句好多少

          2.  沒法查詢數(shù)據(jù)庫,我的想法是如果我在測試中對數(shù)據(jù)庫做了某項(xiàng)操作,(例如新增或刪除),可以被detect到,然后判斷和我預(yù)期的結(jié)果是不是一致。

          可是沒辦法,也沒有別的工具好用的。
          posted on 2005-12-31 12:27 fanta 閱讀(6153) 評論(2)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: 在Spring環(huán)境下結(jié)合TestNG使用DbUnit
          2007-03-06 14:18 | peixubin
          可以用sqlunit來作啊  回復(fù)  更多評論
            
          # re: 在Spring環(huán)境下結(jié)合TestNG使用DbUnit
          2010-09-14 15:35 | 咖啡茶
          您好!我使用dbunit導(dǎo)出的中文是& #23567;& #24352;的形式,請問您怎么解決?(&和#中間我加入了空格,防止頁面自動轉(zhuǎn)換)  回復(fù)  更多評論
            
          主站蜘蛛池模板: 揭阳市| 宝鸡市| 松潘县| 漳州市| 襄汾县| 遂川县| 丹巴县| 荃湾区| 庆城县| 滦南县| 上蔡县| 渭源县| 富宁县| 崇信县| 唐海县| 报价| 建湖县| 鹤岗市| 石河子市| 嘉善县| 黎城县| 军事| 雅江县| 太和县| 成都市| 金华市| 谢通门县| 芦溪县| 赤城县| 陆丰市| 广昌县| 丁青县| 古交市| 肇庆市| 临洮县| 黄大仙区| 五大连池市| 湘阴县| 轮台县| 清水县| 沁源县|