我一直在使用Derby(嵌入式)來測試我的應用程序。它工作正常,但最近它開始給我這樣的問題,如Derby Sequence Loop in junit test。測試:使用最佳嵌入式數據庫
相同的測試可以很好地與其他數據庫(例如H2)一起運行。
我的技術堆棧是Java 1.6,Spring,Hibernate。
我見過類似數據庫(H2,HSQLDB,Derby,PostgreSQL和MySQL)的比較,但比較沒有提及問題(就像我遇到的那個問題)。
那麼,哪一個是測試目的的首選?
我一直在使用Derby(嵌入式)來測試我的應用程序。它工作正常,但最近它開始給我這樣的問題,如Derby Sequence Loop in junit test。測試:使用最佳嵌入式數據庫
相同的測試可以很好地與其他數據庫(例如H2)一起運行。
我的技術堆棧是Java 1.6,Spring,Hibernate。
我見過類似數據庫(H2,HSQLDB,Derby,PostgreSQL和MySQL)的比較,但比較沒有提及問題(就像我遇到的那個問題)。
那麼,哪一個是測試目的的首選?
最佳測試數據庫與您在生產環境中運行的相同類型的相同版本在同一主機操作系統和體系結構上。
這個問題真的傾向於「你在測試中有什麼要求,但沒有讓你考慮另一個數據庫的生產」?
例如,您可能希望一個嵌入式數據庫,你可以輕鬆地啓動,並在單元測試控制破壞,而不必指定路徑外部的二進制文件,啓動和停止數據庫服務器等作爲交換,你接受這是一種妥協,你的測試不像你將要運行的真實系統那麼好。
當我在Java應用程序服務器上構建軟件時,我就像生產機器一樣運行鍼對PostgreSQL的測試。這並不像initdb
和pg_ctl start
一個DB;如果你真的覺得需要,你甚至可以從測試包裝中做到。我認爲人們過於關注完全在線嵌入式數據庫,並沒有正確考慮這些數據庫的成本。
我知道有些人認爲總是使用相同的數據庫會更好。但有一些缺點:
使用不同的數據庫進行單元測試當然也有缺點。如果您使用數據庫特定的功能,則有可能無法運行某些測試,或者測試的行爲不完全相同。因此,我建議使用與生產相同的數據庫來運行每晚構建。
特別是如果您使用的是像Hibernate這樣的數據庫抽象層,切換數據庫應該非常容易。在這種情況下,考慮內存數據庫(如H2,HSQLDB或Derby)確實很有意義。特別是如果你考慮寫許多(或更長時間運行)的測試。
謝謝,我明白這個優點。我想知道的是這些內存中的哪一個最適合或最廣泛地用於單元測試? – adi
可能是HSQLDB和H2。請注意我在H2上工作,所以我很偏向:-) –