2014-09-29 46 views
1

我想寫一個單元測試,將執行檢查從方法返回的字符串。該字符串是實體的一部分,應該通過調用數據庫來生成。我可以很容易地存根這個實體,但我不知道如何省略對數據庫的調用,因爲它是方法的一部分。如何在沒有實際執行查詢的情況下測試查詢數據庫的方法?

的方法是這樣的:

private string GetDescriptionForRelationEntry(string relAttrId, string client) 
     { 
      // here we are querying the database 
      var relationEntities = new EntityDatabaseQuery<AttributeEntryEntity>(); 

      // the rest of the method 
     } 

指定爲the rest of the method需要的部分被執行,因爲我有以獲得字符串結果執行必要的檢查。所以,基本上,我只需要「僞造」一行代碼。

現在我不能說SUT類的廣泛修改是允許的,因此我並沒有將這個問題限制到任何特定的解決方案。任何幫助將不勝感激。

回答

2

通常一個可測試類將是一些接口或某個抽象類的派生類的實現。

因此,你可以使用像溫莎城堡,Ninject或任何可能你更多的控制容器框架的反轉,並提供實現整個界面,將不會打的數據庫,但它會返回一個測試查詢結果。

2

您可以簡單地創建一個模擬的方法來表示您的數據庫結果 使用此鏈接瞭解詳情:http://msdn.microsoft.com/en-us/library/ff650441.aspx

+0

我不知道這將如何幫助我,因爲我需要該方法的第二部分(未顯示在代碼段中)執行。我將編輯我的帖子以說清楚。 – Kapol 2014-09-29 08:16:35

0

大部分嘲弄框架,要求你改變你的解決方案的架構,創造和實現接口,並裝載實現動態。

但是,您也可以使用Microsoft Fakes,它不需要更改您的應用程序。虛假來與Visual Studio,所以你不需要下載或安裝任何東西。

欲瞭解更多信息,請參閱http://msdn.microsoft.com/en-us/library/hh549175.aspx

微軟正版正貨承諾幫助您隔離被替換爲存根或墊片應用程序的其他部分測試代碼。這些是受測試控制的小部分代碼。

1

我建議你看看一個解決方案,讓你在內存中包裝數據庫。例如有the Effort library

Effort是一個功能強大的工具,可以方便地爲基於實體框架的應用程序創建自動化測試 。它基本上是一個ADO.NET提供程序,它在 上執行一個輕量級進程內存數據庫,而不是傳統的外部數據庫。它提供了一些直觀的幫助程序方法, 可以很容易地將此​​提供程序與現有ObjectContext或 DbContext類一起使用。對現有代碼的簡單添加可能足以創建可在沒有外部數據庫的情況下運行的數據驅動的測試。

我解釋瞭如何在this answer中使用它:它是用於實體框架,但我認爲在您的情況下可以使用相同的行爲。

相關問題