没有意义的RhinoMocks异常
本文关键字:异常 RhinoMocks 有意义 | 更新日期: 2023-09-27 18:02:35
Rhino.Mocks.Exceptions.ExpectationViolationException was unhandled by user code
Message=Service.GetCommunityLightPagered(null, 1, null, null, Data.PagingInfo);
Expected #0, Actual #1.
Service.GetCommunityLightPagered(null, 1, null, null, Data.PagingInfo);
Expected #1, Actual #0.
Source=Rhino.Mocks
两个类PagingInfo
是两个实例,但具有相同的值,并且之前使用断言进行了验证。
//Arrange
GetController("user1");
//Act
using (MockRepository.Record())
{
Expect.Call(
ServiceClient.GetMock<Service>().GetUserPermissionSet(
"user1", false, false, false)).Return(
Db.User.Permissions.Where(p => p.Name == "CreateCommunity").ToArray());
}
using (MockRepository.Playback())
{
ActionResult result = Controller.ExecuteAction<int?, int?, string, string, string, string, string, string>(ServiceClient, Controller.SearchCommunities, null, null,null, null, null, CommunityTypeEnum.HighSchool, null,null);
//Assert
Assert.AreEqual(typeof(PartialViewResult), result.GetType());
}
正如Daniel所指出的,分享一些代码。
我最好的猜测是:您已经创建了一个严格的模拟,并且您的测试导致在模拟("实际#1")上发生了意想不到的事情("预期#0")。在Arrange阶段未显式配置的严格模拟上不会发生任何事情。
问题解决:
Expect.Call(ServiceClient.GetMock<IUserService>().GetCommunityLightPagered(null, 1, null,null, new PagingInfo
{
Page = 1,
Rows = 10,
SortColumn = "Id",
SortOrder = "desc"
})
).IgnoreArguments().Return(TestHelper.CommunityInfoLightDTO());
现在所有对this的调用都将被认为是有效的。
编辑1:为什么你应该使用IgnoreArguments()?因为有时你有大的对象需要模拟,也许你只想测试它的一小部分。当我有对象作为参数时,我通常使用它。另一种避免使用它的方法是对两个对象使用相同的哈希码,一个用于记录,一个用于播放参数。