当涉及到数据库,尤其是实体框架时,我对单元测试非常陌生,现在我陷入了困境。我使用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检验严格相等性。testCampaign
和campaign
具有相同的类型和相同的内容,但是引用不同的对象。
你在用什么嘲讽的框架?对我来说,这看起来相当复杂和困惑。对于开始,我建议使用类似Moq 的东西