2012-08-15 40 views
4

的單元測試的目的,是有可能做到這一點:(?XML)實體框架(代碼先)內存數據庫進行單元測試

  • 必須以某種格式簽入源代碼控制測試數據
  • 當單元測試運行,從這個測試數據
  • 有無EF內存數據庫的單元測試運行

的時間運行在此實例某種內存數據庫?

我們不希望我們的單元測試依賴於特定狀態下存在的特定外部數據庫。

我們也不想在我們的代碼和測試中維護兩個不同的「世界」,即真實世界中EF運行時反對真實分貝和虛假工​​作,其中我們的測試運行於某種EF模擬。

+0

我看到矛盾。你不想使用真正的數據庫,你不想使用假。那麼你想用什麼? – 2012-08-15 12:42:57

+0

他想在測試中使用內存數據庫中的空白,這從EF的角度來看是真實的,但是在測試運行和測試之間不持續不依賴於外部數據庫服務器。 – eatfrog 2012-09-13 11:37:58

回答

6

單元測試不應該依賴於任何數據庫。對數據庫的任何依賴(即使在內存數據庫中)意味着您正在進行集成測試,並且應該針對您要使用的實際數據庫進行集成測試。

我不知道任何用於EF的XML數據庫,但即使存在,您也回到您的要求之前:我們也不想在代碼中維護兩個不同的「世界」,並測試。每個數據庫都有自己的由不同公司創建的EF提供者。即使MS SQL Server和MS SQL Server Compact Edition的提供者也不相同,因此它們之間的切換非常具有挑戰性。

你應該做的:

  • 隱藏背後的一些抽象的所有EF使用(包括一切,包括LINQ到實體查詢),並嘲笑這種抽象的,而不是EF單元測試
  • 使用集成測試針對真實的數據庫實現你想用於生產測試抽象本身
+4

那麼你建議創建另一個存儲庫?我發現大部分存儲庫試圖隱藏EF或其他ORM的問題。 DbContext(實現IDbContext)已經是一個存儲庫。 – 2012-08-16 00:21:30

相關問題