亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

利用HSQLDB進行Hibernate的單元測試一

2019-11-18 12:57:03
字體:
來源:轉載
供稿:網友

  動機
  
  曾經使用許多方法在數據庫和目標代碼之間傳輸數據。從手動編碼的SQL到JDO,然后再到EJB,我從未找到一種非凡喜歡的方法。自從采用測試驅動開發(TDD)作為指導原則以來,這種不滿情緒變得更加強烈。
  
  單元測試的障礙應盡可能少。在關系數據庫中,障礙的范圍從外部依靠(數據庫在運行嗎?)到保持關系模型和對象模型同步的速度。由于這些原因,保持數據庫訪問代碼與核心對象模型分離且無需涉及真實數據庫而進行盡可能多的測試是很重要的。
  
  通常這會導致我們進入下面兩種模式之一。第一種是具體化所有訪問域對象的數據以及數據與單獨類或接口之間的關系。這就是典型的能夠檢索、編輯、刪除和添加域實體的數據存儲對象。
  
  這在單元測試中是最輕易模擬出來的,但趨向于把域模型對象作為不帶有任何關系行為的純數據對象。直接從父對象訪問子記錄是最理想的,而不是將父對象處理為第三方類來決定子記錄。
  
  其他方法已經使訪問接口的域對象進入數據映射層(一種la Martin Fowler的數據映象模式)。這具有推動域模型中的對象關系的優點,在域模型中,對象關系型接口只需表達一次即可。
  
  使用域模型的類不支持持久性機制,因為它本身內在化到域模型中。這使代碼集中在設法解決的業務問題,而很少關注對象關系型映射機制。
  
  我的當前項目涉及到處理大量的棒球統計數據,并使用這些數據進行模擬。因為數據已經在關系數據庫中,所以對于我來說,有機會開發Hibernate對象關系型映射系統。
  
  我曾對Hibernate有很深刻的印象,但我碰到的一個問題是,在使用Hibernate進行單元測試的數據映射時,設法插入一個間接層。
  
  該附加層非常脆弱,編寫起來感到非常困難。實際部署版本簡單地通過了特定于Hibernate的實現。更壞的情況是,模擬版本比真正的“產品級”版本更復雜,只因為模擬版本里沒有基本對象存儲器和帶有Hibernate的映射。
  
  我也使用很多復雜的Hibernate查詢,想要對應用程序的重要部分進行單元測試。然而,對活動的數據庫進行測試不是好主意,因為這幾乎總是產生維護問題。
  
  另外,由于測試最好互相獨立,在測試上下文數據中使用相同的主鍵意味著必須在每次測試前創建代碼來清理數據庫,當涉及到大量關系時就成為一個實際問題。
  
  通過使用HSQLDB和Hibernate強大的模式生成工具,能夠對應用程序映射層進行單元測試,并在對象查詢中找到不計其數的bug,這在以前手工測試時是做不到的。利用下面的技術概述,可以在開發過程中對整個應用程序進行測試,并且在測試有效區域內沒有損害。
  
  設置HSQLDB
  
  以前使用HSQLDB 1.7.3.0 版。為了使用數據庫的內存版本,需要激活org.hsqldb.jdbcDriver的靜態加載程序。當獲得JDBC連接時,就可以使用JDBC url例如jdbc:hspldb:mem:yourdb,這里’yourdb’就是想要使用的內存數據庫的名稱。
  
  因為使用Hibernate (3.0 beta 4),所以我幾乎無需接觸實際活動的JDBC對象。相反,我可以讓Hibernate完成很多繁重的任務,包括從Hibernate映射文件中自動創建數據庫模式。
  
  因為Hibernate創建自身專有的連接池,所以它會基于TestSchema類中的配置代碼自動加載HSQLDB JDBC驅動程序。下面就是該類的靜態的初始化程序。
  
  public class TestSchema {
  
  static {
  Configuration config = new Configuration().
  set  setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver").
  setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:baseball").
  setProperty("hibernate.connection.username", "sa").
  setProperty("hibernate.connection.pass
Word", "").
  setProperty("hibernate.connection.pool_size", "1").
  setProperty("hibernate.connection.autocommit", "true").
  setProperty("hibernate.cache.provider_class",
  "org.hibernate.cache.HashtableCacheProvider").
  setProperty("hibernate.hbm2ddl.auto", "create-drop").
  setProperty("hibernate.show_sql", "true").
  addClass(Player.class).
  addClass(BattingStint.class).
  addClass(FieldingStint.class).
  addClass(PitchingStint.class);
  
  HibernateUtil.setsessionFactory(config.buildSessionFactory());
  }
  
  Hibernate提供了許多不同的方式來配置該框架,包括程序方面的配置。上述代碼設置了連接池。注重,使用HSQLDB的內存數據庫需要用戶名'sa’。還樣要確保指定一個空格作為口令。為了啟動Hibernate的自動模式生成功能,需設置hibernate.hbm2ddl.auto屬性為’creat-drop’。
  
  實際測試 我的項目是處理將大量的棒球數據,所以我添加了四個進行映射的類(Player、PintchingStint、,BattingSint和FieldStint)。最后創建Hibernate的會話工廠,并將其插入HibernateUtil類,該類只為Hibernate會話的整個應用程序提供一個訪問方法。HibernateUtil的代碼如下:
  
  import org.hibernate.*;
  import org.hibernate.cfg.Configuration;
  
  public class HibernateUtil {
  
  private static SessionFactory factory;
  
  public static synchronized Session getSession() {
  if (factory == null) {
  factory = new Configuration().configure().buildSessionFactory();
  }
  return factory.openSession();
  }
  
  public static void setSessionFactory(SessionFactory factory) {
  HibernateUtil.factory = factory;
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久中文字幕在线视频| 精品一区二区三区四区在线| www.日韩.com| 国产视频福利一区| 91亚洲va在线va天堂va国| 日韩欧美在线看| 黑人巨大精品欧美一区二区一视频| 国产精品久久久久久亚洲调教| 亚洲欧美三级伦理| 亚洲第一精品久久忘忧草社区| 九九视频这里只有精品| 欧美成人网在线| 日韩视频免费在线观看| 亚洲free性xxxx护士白浆| 亚洲欧美国产精品| 91产国在线观看动作片喷水| 欧美裸体男粗大视频在线观看| 亚洲字幕一区二区| 国产一区二区在线免费视频| 欧美精品一区在线播放| 国产免费一区二区三区在线观看| 亚洲电影免费观看高清完整版在线观看| 日韩av有码在线| 一个人看的www欧美| 欧美一级片久久久久久久| 成人免费高清完整版在线观看| 国产综合香蕉五月婷在线| 精品久久久久久亚洲精品| 久久露脸国产精品| 九色成人免费视频| 伊人伊成久久人综合网站| 在线播放国产一区中文字幕剧情欧美| 国产欧美va欧美va香蕉在线| 国产免费亚洲高清| 成人久久一区二区| 日韩一级裸体免费视频| 久热在线中文字幕色999舞| 久久久久久久久久亚洲| 亚洲国产成人在线视频| 国产国产精品人在线视| 在线日韩欧美视频| 亚洲春色另类小说| 国产精品视频白浆免费视频| 午夜精品一区二区三区av| 欧美黑人一区二区三区| 欧美日韩国产色视频| 中文字幕一区二区三区电影| 国产一区二区三区视频免费| 一个色综合导航| 91视频8mav| 亚洲欧美激情精品一区二区| 欧美成人免费大片| 亚洲精品成a人在线观看| 欧美午夜精品久久久久久久| 亚洲а∨天堂久久精品9966| 日韩电影免费在线观看中文字幕| 日韩在线播放视频| 国产精品电影网站| 日韩欧美综合在线视频| 日韩小视频在线| 精品久久久久久久久久久久久久| 日韩最新免费不卡| 国产成人精品综合| 色哟哟亚洲精品一区二区| 欧美亚洲在线播放| 伊人久久大香线蕉av一区二区| 国产精品久久久久久av下载红粉| 亚洲精品www| 国产综合香蕉五月婷在线| 成人性生交大片免费看视频直播| 成人免费激情视频| 97精品国产aⅴ7777| 国产亚洲精品久久久久动| 最近2019中文免费高清视频观看www99| 欧美怡春院一区二区三区| 亚洲欧美福利视频| 欧美一区三区三区高中清蜜桃| 欧美高清一级大片| 91精品视频免费看| 日韩中文av在线| 色偷偷偷亚洲综合网另类| 色噜噜狠狠狠综合曰曰曰88av| 2019中文字幕免费视频| 68精品久久久久久欧美| 欧美激情一区二区三级高清视频| 久久精品成人动漫| 亚洲aa在线观看| 国产成人综合一区二区三区| 欧美大片大片在线播放| 国产精品成人一区| 日韩美女视频免费看| 夜夜躁日日躁狠狠久久88av| 欧美日韩国产一区中文午夜| 成人信息集中地欧美| 欧美性生交xxxxx久久久| 欧美日韩国产中文精品字幕自在自线| 国产精品美女主播| 亚洲精品有码在线| 亚洲第一网站免费视频| 亚洲天天在线日亚洲洲精| 91国内揄拍国内精品对白| 国产精品自产拍在线观| 久久视频精品在线| 久久久久久久久久久久av| 2019中文字幕免费视频| 国产91精品最新在线播放| 中文字幕日韩精品有码视频| 亚洲xxxxx性| 亚洲国产精品va在看黑人| 免费av在线一区| 欧美成人免费视频| 日韩av色综合| 欧美日韩国产综合视频在线观看中文| 亚洲网站在线播放| 精品高清美女精品国产区| 精品国产乱码久久久久久婷婷| 国产成人一区三区| 欧美第一淫aaasss性| 福利视频第一区| 欧美最顶级丰满的aⅴ艳星| 97香蕉久久夜色精品国产| 日韩成人激情影院| 欧美情侣性视频| 国产精品你懂得| 成人免费福利在线| 精品偷拍一区二区三区在线看| 欧美成人四级hd版| 欧美成人午夜激情在线| 亚洲精品在线不卡| 精品久久久久久久久久久久| 中文字幕亚洲精品| 日韩av免费观影| 国产日韩在线观看av| 欧美日韩中文字幕在线视频| 欧美日韩在线视频一区二区| 国产成人高清激情视频在线观看| 色偷偷偷亚洲综合网另类| 久久久999精品视频| 亚洲奶大毛多的老太婆| 国产69精品99久久久久久宅男| 国产精品成人av在线| 国产欧美精品日韩精品| 国产精品激情av电影在线观看| 欧美巨猛xxxx猛交黑人97人| 北条麻妃99精品青青久久| 亚洲黄在线观看| 自拍亚洲一区欧美另类| 欧美丝袜美女中出在线| 日韩中文字幕在线| 欧美高清一级大片| 一区二区三区四区视频| 国产z一区二区三区| 亚洲精品欧美日韩| 欧洲成人在线观看| 亚洲精品小视频| 一本色道久久88亚洲综合88| 亚洲电影免费观看高清完整版| 亚洲国产精品va在线观看黑人| 国产成人精品综合久久久| 午夜精品一区二区三区在线视频| 久久精品视频网站| 成人激情电影一区二区| 亚洲色图35p| 欧美国产第一页|