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




当涉及到数据库,尤其是实体框架时,我对单元测试非常陌生,现在我陷入了困境。我使用NUnit来测试和模拟所使用的实体,并使用通用存储库进行工作。我的实体框架有一整套POCO类,我目前正在测试的部分如下:

    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中的方法"First"如下所示:

    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方法只是在发送给它的存储库中搜索一个同时包含这两项的Campaign。

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

如果我理解您的代码,请点击此处

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

您正在设置mock对象以返回一个与testCampaign不同的函数。

CCD_ 1检验严格相等性。testCampaigncampaign具有相同的类型和相同的内容,但是引用不同的对象。

你在用什么嘲讽的框架?对我来说,这看起来相当复杂和困惑。对于开始,我建议使用类似Moq 的东西

最新更新