2012-07-13 159 views
0

我在做一個ASP.Net MVC2項目並在其上開發一些單元測試用例。在我的控制器之一,如何使用Moq模擬ObjectResult.FirstOrDefault()使用Moq

String AllowedActions = ""; 
AllowedActions = entities.sp_IsAuthorized(GetLoggedUserId(), 1, item.SubCategoryId, "CreateMeeting_HTML").FirstOrDefault(); 

我無法嘲笑這個sp_IsAuthorized()方法,

public ObjectResult<global::System.String> sp_IsAuthorized(.....){ 

} 

我試着模擬它以這種方式,

var entity = new Mock<TestMVCProductEntities>(); 
entity.Setup(x => x.sp_IsAuthorized(...)).Return(???); 

但我有不知道怎麼回

ObjectResult

這種類型的對象。幫我。

+0

Mocq只能模擬'virtual'方法,所以如果'sp_IsAuthorized'不是虛擬的,它根本就不起作用。 – nemesv 2012-07-13 12:19:48

+0

@nemesv Ya.It。但我的問題是我應該在這個聲明中返回什麼, entity.Setup(x => x.sp_IsAuthorized(...))。Return(???); 我已經把問號。 – Dilma 2012-07-13 12:22:52

+0

我刪除了我的答案,因爲我意識到代碼可能會自動生成,因此您不會更改返回類型。我建議你閱讀[這篇文章](http://msdn.microsoft.com/en-us/ff714955.aspx)關於可測試性和實體框架 – 2012-07-13 13:07:20

回答

1

你不能創建一個ObjectResult的新實例,你不能嘲笑它,因爲它被標記爲密封。我建議您將數據上下文的使用情況包裝到工作單元或類似模式中,以便在單元測試中進行測試。

+0

你能解釋一些代碼嗎? – Dilma 2012-07-13 20:07:03

+0

我通常在存儲庫中包裝我的上下文(LINQ to SQL和EntityFramework)和會話(NHibernate)。這使得模擬依賴於數據的類中的存儲庫成爲可能。具有ObjectContext的Repository模式在此博客文章中詳細描述:http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/ – ThomasArdal 2012-07-17 20:00:15