2012-02-21 70 views
3

我們正在研究數據庫要求不明確的項目。所以我們正在構建一個數據庫不可知應用程序。Spring JPA:在CI環境中測試具有多個數據庫的DAO層

見我以前的問題在這裏:Database Agnostic Application

現在我想測試我的Spring應用程序DAO與多個數據庫。我使用TestNG和DBUnit編寫了多個測試用例。

當我在CI環境中運行這些測試時,我希望他們針對所有配置的數據庫測試應用程序。我已經在'測試服務器'上安裝了數據庫。

例如我想要這樣的東西:

for (each database configured) { 
run each dao test 
} 

不知道這樣做的最佳方式是什麼?歡迎幫助。

感謝, 阿迪

回答

2
  1. 如果您希望獨立於數據庫,則必須針對您希望支持的每個數據庫系統進行測試。 Hibernate有非常好的差異。

  2. 我過去做的是讓測試通過一些系統屬性檢索他們的數據庫配置。通常使用hibernate_.property而不是默認的hibernate.property。然後設置CI作業,它將屬性設置爲不同的值,併爲每個要測試的數據庫提供一個hibernate_xxx.property。我使用JUnit Rules來做到這一點,將邏輯放在一個地方。不知道TestNG的適當工具

  3. 我不喜歡你暗示的循環結構,因爲它可能會使對一個特定數據庫運行測試服務變得困難。

  4. 我也不喜歡dbunit,因爲它似乎使維持testdata相當痛苦。我更喜歡手工製作的DSL。看看一些文章我寫它:

http://blog.schauderhaft.de/2011/03/13/testing-databases-with-junit-and-hibernate-part-1-one-to-rule-them/

http://blog.schauderhaft.de/2011/03/20/testing-databases-with-junit-and-hibernate-part-2-the-mother-of-all-things/

http://blog.schauderhaft.de/2011/03/27/testing-databases-with-junit-and-hibernate-part-3-cleaning-up-and-further-ideas/

2

如果你建立一個數據庫無關的應用程序,而不是使用任何特定的數據庫廠商的固有特徵,那麼你的測試用例的範圍應該是測試設置,操縱,並通過DAO對象訪問數據,而通過測試實際的數據庫後端來訪問數據。 Hibernate 3.5提供了適用於Oracle 11g和DB2的方言,因此如果您正在編寫測試案例來測試數據庫不可知應用程序與特定數據庫供應商的集成情況,那麼您真正在做的是測試hibernate方言如何做他們這樣做(我確信已經被hibernate項目中的測試用例所覆蓋)。

換句話說,就你的情況而言,我認爲測試應該更多地關注DAO檢索你認爲在設置好數據後將檢索的數據,而且內存數據庫適用於那。

現在所有這一切,DB2Oracle都有非常好的文檔相關的設置。事實上,他們都有「巫師」來做這件事。如果您仍然認爲測試向數據庫添加數據並從物理非內存數據庫中檢索數據是謹慎的,那麼我建議設置一個「測試數據庫」環境,並在持續集成期間將數據源指向該數據源試驗。如果您使用Hudson或Jenkins作爲配置項,那麼在構建完成後您可以使用set it up to run a script,這將截斷數據庫表,以便下一輪測試可以從空白頁開始工作。

編輯

我剛纔看到你發佈到你的問題的更新,所以讓我解決這些問題。既然你已經有了數據庫的設置和配置,那麼你真正想要做的就是動態選擇數據庫應該是什麼。一種方法是使用可以從屬性文件繼承的系統屬性來設置數據源,然後在「DB2測試」環境和「Oracle測試」環境中運行測試。使用這種方法,您必須設置datasource programmatically並讓它讀取系統環境變量以確定它連接到哪個數據庫。這基本上要求你改變你的CI腳本,先運行DB2測試環境,然後再運行Oracle測試環境 - 你的測試套件將運行兩次。

希望這會有所幫助!

+0

我所做的一切。我的目標只是測試DAO檢索並堅持數據。我已經有了針對Oracle的測試案例。我使用Unitils在測試運行之前清除所有數據,每次都加載測試數據。現在我正在尋找的是如何在循環中運行所有測試,以便對所有配置的數據庫測試DAO? – adi 2012-02-21 13:22:54

+0

查看我的文章的更新...這個想法是,您可以針對不同的數據源連續運行測試套件。 – 2012-02-21 13:24:25

+0

然後依賴於CI服務器。它不能僅僅使用Spring來完成嗎? – adi 2012-02-21 13:26:28