我的集成測試將運行得更快。我使用JPA(Hibernate),而且我需要一個內存數據庫,它可以很容易地切換到使用JPA,易於設置和可靠。它需要支持JPA和Hibernate(或者反之亦然),因爲我不想採用我的數據訪問代碼進行測試。簡單,在與JPA
什麼數據庫是最好的選擇上面給出的要求?
我的集成測試將運行得更快。我使用JPA(Hibernate),而且我需要一個內存數據庫,它可以很容易地切換到使用JPA,易於設置和可靠。它需要支持JPA和Hibernate(或者反之亦然),因爲我不想採用我的數據訪問代碼進行測試。簡單,在與JPA
什麼數據庫是最好的選擇上面給出的要求?
對於集成測試,我現在使用H2(來自HSQLDB的原作者),我比較喜歡HSQLDB。它是faster(我希望我的測試儘可能快),它有一些很好的功能,比如compatibility模式,開發團隊響應速度很快(而HSQLDB幾年前一直保持休眠狀態直到最近)。
我一直在使用HSQLDBin-memory來集成測試Java中的JPA/Hibernate持久性。啓動非常快,不需要任何特殊設置。
到目前爲止使用HSQLDB和Hibernate我見過的唯一問題是在批量大小需要被設置爲0,這樣做,但是,很可能只是已涉及到舊版本。我會挖掘一下,看看我能否找到這個問題的細節。
Derby supports an in-memory mode這些天,這已不再是試驗。
我使用德比。首先,每單元測試的代碼行數少於3行,因爲在測試之後不需要關機。但是,您需要使用可以刪除和創建諸如EclipseLink之類的表的JPA實現。
德比也可以從文件中初始化一個新的內存數據庫,所以你可以有一個參考數據庫,並恢復它在任何時候。
儘管對於單元測試,我更喜歡在我的單元測試的@Before邏輯中創建我的對象,我發現它更容易,尤其是使用JPA,因爲它允許我靈活地進行重構,而不必擔心底層數據庫結構,其他像DBunit這樣的工具實際上依賴於靜態結構,重構意味着手動更改DBunit XML,而不是依賴於Eclipse的重構功能。
基準測試用於持久數據存儲,因爲大部分開銷是由於數據庫中的磁盤/高速緩存策略所致,所以內存中的結果可能不同。 H2和HSQLDB的區別很大,但並不重要。我仍然選擇基於易用性,最小配置,功能。兼容模式功能看起來非常有吸引力。謝謝! – topchef 2010-08-10 03:19:49
@grigory:是的,你說得對。但即使使用持久模式,H2和HSQLDB實際上默認在內存中運行,並推遲寫入磁盤(以Durability的價格)。所以數據仍然很有趣。 – 2010-08-10 09:55:00