• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2009-4-02 10:12 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 30次 | 進入軟件測試論壇討論

    領測軟件測試網  曾經使用許多方法在數據庫和目標代碼之間傳輸數據。從手動編碼的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(). setProperty

    ("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"). setProperty

    ("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver"). setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:baseball").

    setProperty("hibernate.connection.username", "sa"). setProperty("hibernate.connection.password", ""). setProperty

    ("hibernate.connection.pool_size", "1"). setProperty("hibernate.connection.autocommit", "true").

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: hibernate Hibernate 單元 HSQLDB

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>