您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > DBunit
Spring+iBatis+DBUnit 進(jìn)行單元測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/12/24 13:43:59 ] 推薦標(biāo)簽:單元測(cè)試 開源 測(cè)試

除了前面那兩個(gè)方法外,我們還重載了 getSetUpOperation 和 getTearDownOperation 方法:DatabaseOperation.REFRESH 告訴DBUnit在測(cè)試開始前比較數(shù)據(jù)庫和配置文件,如果發(fā)現(xiàn)測(cè)試數(shù)據(jù)不存或不一致在則插入或更新***。DatabaseOperation.NONE表示什么也不做。

這個(gè)CASE應(yīng)該可以運(yùn)行的很好,但是如果我們把 getTearDownOperation改成:

@Override
protected DatabaseOperation getTearDownOperation() throws Exception
{
   return DatabaseOperation.DELETE_ALL;
}

會(huì)發(fā)生java.sql.SQLException: Closed Connection異常。這是為什么呢?問題出在DatabaseTestCase中。

***參數(shù)含義
DatabaseOperation.CLEAN_INSERT;      先刪除表中所有,再插入準(zhǔn)備的數(shù)據(jù)
DatabaseOperation.REFRESH;              使用準(zhǔn)備數(shù)據(jù)更新表,存在則update,不存在則insert
DatabaseOperation.DELETE;                只刪除準(zhǔn)備的數(shù)據(jù)
DatabaseOperation.DELETE_ALL           清除所有記錄
DatabaseOperation.NONE;                   啥都不做

java.sql.SQLException: Closed Connection異常
來看一下DatabaseTestCase的一個(gè)關(guān)鍵成員變量tester和有關(guān)的一些方法:

public abstract class DatabaseTestCase extends TestCase
{
   ......
   private IDatabaseTester tester;
   ......
   protected IDatabaseTester getDatabaseTester() throws Exception {
      if (this.tester == null) {
         this.tester = newDatabaseTester();
      }
      return this.tester;
   }
   ......
   protected IDatabaseTester newDatabaseTester() throws Exception{
      logger.debug("newDatabaseTester()- start");
      // 重載的 getConnection 方法,在 IDatabaseTester 里有一個(gè)同名方法。
      // 注意區(qū)分。
      final IDatabaseConnection connection = getConnection();
      final IDatabaseTester tester
         = new DefaultDatabaseTester(connection);
      return tester;
   }
   ......
   protected void setUp() throws Exception
   {
      logger.debug("setUp()- start");
      super.setUp();
      final IDatabaseTester databaseTester = getDatabaseTester();
      assertNotNull("DatabaseTesteris not set", databaseTester);
      databaseTester.setSetUpOperation(getSetUpOperation());
      databaseTester.setDataSet(getDataSet());
      databaseTester.onSetup();
   }
   ......
}

可見 DatabaseTestCase 內(nèi)部有一個(gè) IDatabaseTester 接口的實(shí)例(tester),實(shí)際上所有的測(cè)試工作是由它完成的。而DatabaseTestCase的newDatabaseTester方法在生成這個(gè)實(shí)例的時(shí)候用的是DefaultDatabaseTester。傳入一個(gè)由重載的getConnection方法返回的IDatabaseConnection實(shí)例。

DefaultDatabaseTester記錄了這個(gè)連接實(shí)例后,提供了一個(gè)同名的getConnection()方法(不是DatabaseTestCase中被重載的那個(gè)getConnection),用來返回它:

public class DefaultDatabaseTester extends AbstractDatabaseTester
{
   final IDatabaseConnection connection;
   public DefaultDatabaseTester(final IDatabaseConnection connection){
      this.connection= connection;
   }
   public IDatabaseConnection getConnection() throws Exception {
      return this.connection;
   }
}

上一頁12345678下一頁
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd