2011-08-19 115 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