没有意义的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());
        }

没有意义的RhinoMocks异常

正如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()?因为有时你有大的对象需要模拟,也许你只想测试它的一小部分。当我有对象作为参数时,我通常使用它。另一种避免使用它的方法是对两个对象使用相同的哈希码,一个用于记录,一个用于播放参数。