2011-08-19 117 views
0


對於數據庫和特別是實體框架的單元測試,我很新,現在我被卡住了。我正在使用NUnit來測試和模擬使用的實體,並且正在使用通用資源庫。我的實體框架擁有全套POCO類和位我目前正在測試這個樣子的:實體框架4單元測試和嘲諷

campaignRepoMock = new DynamicMock(typeof(IRepository<Campaign>)); 
    campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func<Campaign, bool>(c => c.CampaignID == testCampaign.CampaignID)); 
    CampaignService campaignService = new CampaignService((IRepository<Campaign>)campaignRepoMock.MockInstance); 
    Campaign campaign = campaignService.GetCampaign(testCampaign.Key, ProjectId); 
    Assert.AreEqual(testCampaign, campaign); 

testCampaign是一個POCO運動測試對象。在IRepository的方法「第一」看起來像下面這樣:

public T First(Func<T, bool> predicate) 
    { 
     return _objectSet.FirstOrDefault<T>(predicate); 
    } 

我從NUnit的正的錯誤是

CampaignServiceTests.Campaign_Get_Campaign: 
    Expected: <System.Func`2[Campaign,System.Boolean]> 
    But was: <System.Func`2[Campaign,System.Boolean]> 

所以它基本上是說,它是得到什麼期待,但它拋出一個錯誤?也許我對這一點的理解是錯誤的,我只是想根據它的關鍵和它所鏈接的項目來測試一個Campaign的搜索。 GetCampaigns方法僅搜索發送給它的存儲庫,以獲取包含這兩個項目的廣告系列。

任何人都可以指出我做錯了什麼?提前致謝。

回答

1

如果我理解你的代碼,你要設置你的模擬對象返回一個函數,不等於你testCampaign在這裏

campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func<Campaign, bool>(c => c.CampaignID == testCampaign.CampaignID)); 

Assert.AreEqual()嚴格平等的測試。 testCampaigncampaign是相同類型,並具有相同的內容,但指的是不同的對象。

你在使用什麼模擬框架?看起來很複雜,讓我感到困惑。對於開始,我會推薦像Moq

+0

嗨,感謝您的回答,我會調查並回復你。我正在使用NUnit.Mocks模擬框架。我看着Moq,但卻無法像這樣輕鬆地將我的頭轉過來,也許我應該再去一次。 – Chiefy

+0

一旦你得到它,它真的很容易。看看Moq的這個介紹:http://www.dimecasts.net/Casts/CastDetails/8 –

+0

感謝丹尼斯,在這裏也發現了一個很好的帖子http://stackoverflow.com/questions/5769414/cannot-seem -to-MOQ-EF-codefirst-4-1-求助的人。原來搜索「EF」會比「實體框架」帶來更多的結果。將使用Moq代替。 – Chiefy