2013-02-18 43 views
1

許多人,所以我在谷歌閱讀努力單元測試存儲庫類與所謂的內存數據庫相比,集成測試與真正的數據庫。爲什麼每個人都想使用實體框架進行單元測試,而不是集成測試

做後者的問題在哪裏?

+1

給了我一個-1的傢伙。我已經第一次讀到這個話題,並沒有找到提供的鏈接,所以爲什麼這個問題值得懲罰呢? – Elisabeth 2013-02-18 10:23:43

+0

輕鬆解決:) +1因爲我同意,很好的問題,即使它是重複的... – bas 2013-02-18 19:29:12

回答

2

如果使用EF,則不必編寫測試以查看EF是否正確保存數據。因此,您不需要真正的數據庫進行測試,您需要測試的只是您的代碼邏輯,而內存數據庫在此情況下最適合,它有助於區分疑慮,靈活,易於運行且運行速度快於使用真實的數據庫。

此外,運行與真實數據庫的集成測試相當複雜。它需要一些配置(連接字符串,刪除並重新創建數據庫...)在運行之前可能需要一些時間。由於配置錯誤(例如,在測試期間使用共享數據庫),測試可能會失敗,調試需要時間。

0

無論您是針對內存數據庫還是實際數據庫進行測試,您都沒有進行單元測試 - 這兩項測試都是集成測試。兩者實際上都會測試某種形式的連接和提供者實現。

我會看到內存數據庫使用VS一個真正的數據庫的主要好處是

  • 權限 - 使用一個真正的數據庫通常需要的權限和連通性的更高的水平。像文件寫入權限或訪問數據庫服務器一樣。內存數據庫可能不需要相同級別的權限。
  • 速度 - 這是快速旋轉起來,比一個實際的數據庫

根據您的模式(即,如果您使用的一個工作單元)推倒的內存數據庫,它很可能是你甚至不需要數據庫來測試您的存儲庫。

+0

是的我使用工作模式的單位。所以我不需要一個真正的或內存中的數據庫。請澄清一下。 – Elisabeth 2013-02-18 09:08:25

+0

你可以抽象你的DbContext,並嘗試模擬IQueryable在http://stackoverflow.com/questions/13332002/how-to-mock-the-limitations-of-entityframeworks-implementation-of-iqueryable – 2013-02-18 10:00:11

+0

但是,我會最終在你發佈我的鏈接中。鏈接說只做單元測試是不夠的。因此,我想首先進行整合測試,這對我來說足夠了。 – Elisabeth 2013-02-18 10:25:38