2010-08-09 88 views
15
支持快速的Java集成測試的內存數據庫可靠的,如果我使用的內存數據庫,而不是PostgreSQL的

我的集成測試將運行得更快。我使用JPA(Hibernate),而且我需要一個內存數據庫,它可以很容易地切換到使用JPA,易於設置和可靠。它需要支持JPA和Hibernate(或者反之亦然),因爲我不想採用我的數據訪問代碼進行測試。簡單,在與JPA

什麼數據庫是最好的選擇上面給出的要求?

回答

19

對於集成測試,我現在使用H2(來自HSQLDB的原作者),我比較喜歡HSQLDB。它是faster(我希望我的測試儘可能快),它有一些很好的功能,比如compatibility模式,開發團隊響應速度很快(而HSQLDB幾年前一直保持休眠狀態直到最近)。

+0

基準測試用於持久數據存儲,因爲大部分開銷是由於數據庫中的磁盤/高速緩存策略所致,所以內存中的結果可能不同。 H2和HSQLDB的區別很大,但並不重要。我仍然選擇基於易用性,最小配置,功能。兼容模式功能看起來非常有吸引力。謝謝! – topchef 2010-08-10 03:19:49

+0

@grigory:是的,你說得對。但即使使用持久模式,H2和HSQLDB實際上默認在內存中運行,並推遲寫入磁盤(以Durability的價格)。所以數據仍然很有趣。 – 2010-08-10 09:55:00

4

我一直在使用HSQLDBin-memory來集成測試Java中的JPA/Hibernate持久性。啓動非常快,不需要任何特殊設置。

到目前爲止使用HSQLDB和Hibernate我見過的唯一問題是在批量大小需要被設置爲0,這樣做,但是,很可能只是已涉及到舊版本。我會挖掘一下,看看我能否找到這個問題的細節。

Derby supports an in-memory mode這些天,這已不再是試驗。

+0

爲內存數據庫我想有最簡單的和最侵入性(希望零自定義(除了persistence.xml中)溶液)給出的同樣的支持。謝謝! – topchef 2010-08-09 22:07:16

+0

對HSQLDB的另一次投票,特別是自V2發佈以來,v1.x將不支持JDBC支持的一些當前結構,例如返回自動生成的鍵值,但v2卻支持。 – mezmo 2010-08-10 21:58:16

2

我使用德比。首先,每單元測試的代碼行數少於3行,因爲在測試之後不需要關機。但是,您需要使用可以刪除和創建諸如EclipseLink之類的表的JPA實現。

德比也可以從文件中初始化一個新的內存數據庫,所以你可以有一個參考數據庫,並恢復它在任何時候。

儘管對於單元測試,我更喜歡在我的單元測試的@Before邏輯中創建我的對象,我發現它更容易,尤其是使用JPA,因爲它允許我靈活地進行重構,而不必擔心底層數據庫結構,其他像DBunit這樣的工具實際上依賴於靜態結構,重構意味着手動更改DBunit XML,而不是依賴於Eclipse的重構功能。