Unit testing 实体框架4单元测试和模拟

Unit testing 实体框架4单元测试和模拟,unit-testing,entity-framework-4,nunit,repository-pattern,Unit Testing,Entity Framework 4,Nunit,Repository Pattern,当涉及到数据库,尤其是实体框架时,我对单元测试是非常陌生的,现在我被卡住了。我正在使用NUnit测试和模拟所使用的实体,并且正在使用通用存储库。我的实体框架有一整套POCO类,我目前测试的bit如下所示: campaignRepoMock = new DynamicMock(typeof(IRepository<Campaign>)); campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func&l


当涉及到数据库,尤其是实体框架时,我对单元测试是非常陌生的,现在我被卡住了。我正在使用NUnit测试和模拟所使用的实体,并且正在使用通用存储库。我的实体框架有一整套POCO类,我目前测试的bit如下所示:

    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);
activityrepomock=newdynamicmock(typeof(IRepository));
campaignRepoMock.ExpectAndReturn(“第一个”,testCampaign,新函数(c=>c.CampaignID==testCampaign.CampaignID));
活动服务活动服务=新的活动服务((IRepository)活动报告模拟.MockInstance);
活动活动=活动服务.GetCampaign(testCampaign.Key,ProjectId);
Assert.AreEqual(testCampaign,campaign);
testCampaign是单个POCO活动测试对象。IRepository中的方法“First”如下所示:

    public T First(Func<T, bool> predicate)
    {
        return _objectSet.FirstOrDefault<T>(predicate);
    }
public T-First(Func谓词)
{
返回_objectSet.FirstOrDefault(谓词);
}
我从Nunit那里得到的错误是

CampaignServiceTests.Campaign_Get_Campaign:   
  Expected: <System.Func`2[Campaign,System.Boolean]>  
  But was: <System.Func`2[Campaign,System.Boolean]>
ActivationServiceTests.Campaign\u Get\u活动:
预期:
但是:
所以它基本上是说它得到了它所期望的,但是它抛出了一个错误?也许我对这一切的理解都是错误的,我只是想测试一下,根据它的关键字和它所链接的项目来搜索一个活动。GetCampaigns方法只需搜索发送给它的存储库中同时包含这两个项目的活动


有人能指出我做错了什么吗?提前谢谢。

如果我理解你的代码,请看这里

campaignRepoMock.ExpectAndReturn("First", testCampaign, new Func<Campaign, bool>(c => c.CampaignID == testCampaign.CampaignID));
campaintrepomock.ExpectAndReturn(“第一”,testcampait,newfunc(c=>c.campaitId==testcampait.campaidId));
您正在设置模拟对象以返回与testCampaign不同的函数

Assert.AreEqual()
测试严格的相等性
testCampaign
campaign
属于同一类型,具有相同的内容,但引用的对象不同


你在使用什么样的模拟框架?我觉得很复杂,很困惑。首先,我想推荐一些类似于

嗨,谢谢你的回答,我会调查一下,然后再给你回复。我正在使用NUnit.Mocks mocking框架。我看了看最低起订量,但没法像这样轻松地控制住它,也许我应该再试一次。一旦你做到了,就真的很容易了。看看这篇Moq介绍:谢谢丹尼斯,在这里也找到了一篇好文章。事实证明,搜索“EF”比搜索“实体框架”带来更多的结果。将使用最小起订量代替。