2009-01-02 38 views
8

我一直在努力推動自己的心智,當在家裏開發更加面向TDD和DDD。測試假存儲庫有什麼意義?

我不明白的一件事是爲什麼你會創建一個虛假的存儲庫來測試?我沒有仔細研究它,但是測試的想法肯定是幫助解耦你的代碼(給你更多的靈活性),修剪掉所需的代碼並減少錯誤的數量。

那麼有人可以填寫我的愚蠢的大腦,爲什麼有些人喜歡測試假的存儲庫?我認爲測試一個真正的數據庫是一個更好的選擇,創建一個假的,因爲那麼你知道它對你的真實世界的數據存儲工作。

+0

我也沒有看到任何理由,很容易建立一個數據庫實例並將其用於開發。 – 2009-01-02 13:13:25

+0

您可能會詢問有關測試假存儲庫和測試假冒存儲庫的問題。我認爲你的意思很重要,但是你能否澄清這個問題,以便人們可以提供更有針對性的答案? – 2009-01-02 13:22:00

回答

21

假存儲庫允許您測試只是您的應用程序代碼。

假存儲庫意味着自動化測試可以在存儲庫中輕鬆設置已知狀態。

假存儲庫比實際數據庫快幾個數量級。

假存儲庫不會替代系統測試,它將包含您的數據庫。

7

在我看來有兩個,爲什麼你對測試僞造的資源非常大的原因:

  • 這使得單元測試更快當你有一個嘲笑起來反對緩慢的I/O或數據庫。如果你有一個小測試套件,這可能看起來不像任何東西,但當你達到+500單元測試時,它開始有所作爲。在這樣的數量下,針對數據庫運行的測試將需要幾秒鐘的時間才能完成。程序員很懶,希望事情進展得很快,所以如果運行一個測試套件需要10秒以上的時間,那麼你不會樂意做TDD了。
  • 它強制您考慮您的代碼設計以使更改變得更容易。如果您已經針對接口或抽象類進行實現,則通過契約和依賴注入進行設計也變得容易得多。如果做得對,這樣的設計可以更容易地遵守代碼中的更改。

唯一的缺點是明顯的:

  • 你怎麼能肯定它真的有效?

...這就是集成測試是。

2

我upvoted長頸鹿的答案,但要添加只是幾個點:

  • 每個開發人員可以使用模擬/假 庫爲她/他自己的單元 測試,而不與 測試干擾由同一項目上的其他開發者 完成。

  • 使用本地的模擬/假庫 加強了數據 抽象層,這是很好的 設計實踐的用戶。

作爲一個例子,我已經用作HashMap簡單的東西來實現數據存取層的模擬。這使得每個單元測試都很容易,以確保爲其目的準確地存在必要條件,並驗證是否在數據訪問層上進行了正確的調用。