如果你的函數做了一些有趣的事情,除了將數據從數據庫中提取出來之外,你應該將檢索提取到一個不同的函數中,並對其進行模擬,以便測試其餘的部分。
這仍然會讓您執行測試數據庫訪問的任務。你不能真的爲此做一個單元測試,因爲按定義它不會訪問任何數據庫,你可以測試它是否發送你認爲它應該的sql語句,但是如果sql語句實際工作則不會。
所以你需要一個數據庫
你有不同的optiones:
1)創建這樣的測試不得到由測試改變一個固定的數據庫。
專業:概念上容易 騙局:難以維護。測試變得相互依賴,因爲它們依賴於相同的數據。沒有辦法測試更新,插入或刪除的東西(更不用說DDL)
2)在測試期間創建數據庫。現在你有兩個問題:爲測試設置數據庫並填充數據。
設置:
1)有一個數據庫服務器上運行,與erveryone用戶/模式/數據庫誰需要運行測試(至少開發者+ CI服務器)。架構可以使用諸如hibernate之類的東西或用於部署的腳本來創建。
工程很好,但讓老派的DBA瘋狂。應用程序不能依賴於模式名稱。當您有多個應用程序使用的架構時,您也會遇到問題。這種設置相當緩慢。它可以幫助放入快速光盤。像RAM光盤
2)有一個內存數據庫。易於從代碼開始並且快速。但在大多數情況下,它的行爲與生產數據庫相同。如果你使用某些試圖掩蓋差異的東西,那麼這個問題就不那麼重要了。我經常在第一階段使用內存數據庫,第二階段使用內存數據庫。
加載測試數據
1)人們告訴我使用dbunit。我不認爲它看起來很多XML,並且在列或約束更改時很難維護。
2)我更喜歡普通的應用程序代碼。 (Java + Hibernate),但是在生產環境中將數據寫入數據庫的代碼在很多情況下適用於爲測試編寫測試數據。它有助於有一個特殊的API隱藏滿足所有外鍵和東西的細節: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/13/testing-databases-with-junit-and -hibernate-part-1-one-to-rule-them/ – 2012-04-23 20:58:58