2014-02-19 96 views
0

我試圖找到一種方法,單元測試我的MySQL相關的代碼。我知道我希望如何工作,但無法找到適合我的解決方案。我研究過DBUnit,但看起來(如果我沒有弄錯),這將需要一個運行的數據庫,並且只是幫助單元測試。我想要一些方法來避免在測試時運行mysql數據庫。什麼工作將會是某種實際將數據存儲在內存中的MySQL欺騙驅動程序,而不需要訪問真正的持久數據庫。數據庫單元測試(MySQL的)

在我的代碼是硬編碼訪問MySQL數據庫,所以我不能只是注入一些模仿的對象。我想它的工作方式是,當我的代碼調用:

DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password); 

它實際上獲取可以通過行家或在Maven測試的設置來配置一些其他本地數據庫。我研究了基於內存的數據庫,如HSQLDB,但無法找到一種方式來欺騙MySQL驅動程序。

有沒有提供什麼,我期待的任何工具?你有任何測試MySQL相關代碼的好方法嗎?

+0

http://stackoverflow.com/questions/10692398/how-do-i-make-a-mysql-database-run-completely-in-memory 當單元測試記住首先填充數據庫之前啓動主程序。 – Tschallacka

+0

我不知道如何在沒有運行實際的mysql服務器的情況下使用它。但是這個想法確實讓我想到了在單元測試期間運行嵌入式mysql服務器。 – flungo

回答

1

我有幾個項目中,我不得不這樣做集成測試對正在運行的MySQL服務器。我沒有花時間每次都設置它,而是開發了一個library,每次運行測試時都會設置一個本地運行的MySQL實例。

隨着你得到的是就像真實的東西(因爲它是)一個測試數據庫,而無需設置。

DBUnit的也是一個不錯的選擇,如果你想嘲笑數據庫集成(據我所知,目前還沒有必要爲一個真正的MySQL服務器使用DBUnit的時候)。

+0

我想我最終將使用MySQL嵌入版本的類似方法作爲測試依賴項的一部分。我做了一個名爲MyUnit的項目,它在擴展時會在測試之前和之後實例化和銷燬MySQL數據庫。 DBUnit看起來很感興趣,所以也會看看這個。在我正在進行的一個項目中,對此的需求實際上又出現了,所以我會再次看看這些選項。 – flungo

+0

請參閱http://stackoverflow.com/a/19279391/416300。這傢伙寫了一個Maven插件,在測試之前和之後開始和停止MySQL DB。 – summerbulb

+0

這是正確的,它可以在開發Java應用程序時使用。 – StumpDK