2016-11-19 136 views
0

我正在編寫基於Hibernate/SQL的應用程序的crud API。我正在使用mysql進行測試和實況環境。Junit測試數據庫

對於測試,我有一個數據庫,用戶和特權。因此,每次測試時,我必須按照下列步驟操作:

  1. 刪除數據庫中的所有表。
  2. 運行「mvn clean install」,hibernate在db中查找表並在不存在的情況下創建它們。

我想我的測試,它不會收集我的MySQL數據庫中的垃圾,我不必每次都丟棄表。是否有一些可用於此目的的內存rdbms,以及如何根據運行環境選擇this和mysql來進行測試或生活。

回答

3

我更喜歡使用H2,dbUnit和spring-test。 Hsqldb和Derby是其他內存數據庫,是合理的選擇。 Spring中的測試使用自己的獨立上下文和自己的數據源,測試上下文配置取代了正常的應用上下文值。這樣就不需要額外的努力來切換數據庫,測試可以設置爲在應用程序使用mysql時使用H2。

請注意,mysql允許接受的sql,其他數據庫往往更嚴格。如果您使用原生SQL,可能會妨礙使用內存數據庫。

我認爲測試行使你的數據層是值得的,特別是在使用Hibernate的時候,這很複雜,我想確認它確實在做我認爲應該做的事情。

+0

我也有些DAO測試,但通常他們是單元測試 - 只是測試數據庫訪問 - 我讓這些層疊到「真實」數據庫而不是內存之一。這樣他們測試表元數據也是正確的,而不僅僅是訪問它們的代碼。但是通過測試訪問DAO的其他圖層中的代碼,我通常會對它們進行存根或模擬,而不是讓它們通過。 –

+1

@Jim:謝謝,我編輯過,所以我不會誤解你的觀點 –

1

HSQLDB和H2我認爲這是很常見的選擇。

就我個人而言,我不再走這條路 - 當我運行單元測試時,我只是用測試打包出DAO,以便他們寫入或讀取內存中的列表,或爲它們提供模擬。沒有複雜的技術。這確實意味着實際的數據庫持久性沒有被測試 - 如果我覺得我需要這樣做,我通常會爲DAO自己編寫單獨的單元測試,以專門連接到物理數據庫,並在拆卸時清理我需要的任何東西那些測試。