亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > DBunit
Spring+iBatis+DBUnit 進行單元測試
作者:網絡轉載 發布時間:[ 2013/12/24 13:43:59 ] 推薦標簽:單元測試 開源 測試

因為所有的IDatabaseTester實現(包括DefaultDatabaseTester)都繼承自AbatractDatabaseTester,這個抽象類有一個統一的執行數據庫操作的方法executeOperation,原代碼如下:

private void executeOperation(DatabaseOperation operation) throws Exception
{
   logger.debug("executeOperation(operation={})- start", operation);
   if(operation != DatabaseOperation.NONE ){
      // IDatabaseTester 的 getConnection 方法,不是重載的那個。
      IDatabaseConnection connection = getConnection();
      try{
          operation.execute(connection, getDataSet() );
      }
      finally{
         closeConnection(connection);
      }
   }
}

我們看到每執行完一次操作,數據庫連接都會被關閉,所以如果繼承DefaultDatabaseTester,將導致只能執行一次數據庫操作。
如果希望在一個TestCase里執行兩次操作,我們可以使用另一個基類


DBTestCase類
如上面所看到的,問題出在DatabaseTestCase的newDatabaseTester方法返回了一個無法重復利用的DefaultDatabaseTester實例,所以DBTestCase的newDatabaseTester方法代碼變更如下:

protected IDatabaseTester newDatabaseTester() throws Exception {
   return new PropertiesBasedJdbcDatabaseTester();
}

它用來生成實例的是 PropertiesBasedJdbcDatabaseTester 類,而不是 DefaultDatabaseTester 。這個類的父類 JdbcDatabaseTester(也繼承自 AbstractDatabaseTester)的 getConnection 方法:

public IDatabaseConnection getConnection() throws Exception
{
   logger.debug("getConnection() - start");
   if(!initialized ){
      // 注意這個方法,等一下詳解
      initialize();
   }
   assertNotNullNorEmpty("connectionUrl", connectionUrl);
   Connection conn = null;
   if(username == null && password == null ){
      conn = DriverManager.getConnection(connectionUrl);
   }else{
      Conn = DriverManager.getConnection(connectionUrl,username,password);
   }
   return new DatabaseConnection( conn, getSchema() );
}

可以看到每次調用這個方法,都會新建一個連接,而不是簡單的返回我們重載的 getConnection 中返回的連接的引用。這樣避免了 DefaultDatabaseTester 僅僅是簡單返回之前的連接而倒置的問題。不過這也意味著用 DBTestCase 不用我們自己去重載 getConnection 了,因為 DBTestCase 已經實現了這個方法(DatabaseTestCase沒有實現):

protected IDatabaseConnection getConnection() throws Exception {
   logger.debug("getConnection() - start");
   final IDatabaseTester databaseTester = getDatabaseTester();
   assertNotNull( "DatabaseTester is not set",databaseTester);
   return databaseTester.getConnection();
}

我們看到DBTestCase的getConnection簡單的把這個方法轉給JdbcDatabaseTester(IDatabaseTester) 的getConnection。而JdbcDatabaseTester的實現我們在前面已經看到了。

上一頁12345678下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: www三级免费 | 欧美成人高清乱码 | 中文字幕免费在线观看 | 成人欧美日本免费观看 | 成人全黄三级视频在线观看 | 伊人网大香 | 免费视频中文字幕 | 免费妞干网 | 日本欧美成人免费观看 | 一级做a爰片毛片 | 一级特黄aaa大片在线观看 | 一级特黄录像播放 | 亚洲国产日韩欧美在线a乱码 | 香蕉超级碰碰碰97视频蜜芽 | 77788色淫网站免费视频 | 免费观看一区二区 | 91在线精品你懂的免费 | 国产成人拍精品视频网 | 欧美日韩麻豆 | 国产a免费视频 | 一区二区三区视频在线播放 | 伊人婷婷色香五月综合缴激情 | 国产福利亚洲 | 天天av天天翘天天综合网 | 黄色成人在线观看 | 国产日韩在线视频 | 毛片黄色| 在线观看www成人影院 | 草草影院第一页yycccom | 欧美日韩视频一区二区在线观看 | 色天天综合网 | 久久国产偷 | 久久精品伊人波多野结 | 国产精品日韩欧美一区二区三区 | 午夜视频在线免费观看 | 看特级毛片| 日韩精品一区二区三区中文精品 | 久久网站免费 | 人人玩人人添人人澡免费 | 综合图色| 国产a∨一区二区三区香蕉小说 |