RhinoMocks异常没有任何意义

时间:2011-07-13 15:01:52

标签: c# unit-testing rhino-mocks

 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

2个类PagingInfo是2个实例,但具有相同的值,并且在使用断言之前已经过验证。

这是单元测试代码

        //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());
        }

2 个答案:

答案 0 :(得分:2)

正如丹尼尔所说,分享一些代码。

我最好的猜测:您已经创建了一个严格的模拟,并且您的测试导致模拟(“实际#1”)上发生了一些不期望的事情(“预期#0”)。在编配阶段未明确配置的严格模拟上不会发生任何事情。

答案 1 :(得分:1)

问题解决了:

Expect.Call(ServiceClient.GetMock<IUserService>().GetCommunityLightPagered(null, 1, null,null, new PagingInfo
                {
                    Page = 1,
                    Rows = 10,
                    SortColumn = "Id",
                    SortOrder = "desc"
                })
                ).IgnoreArguments().Return(TestHelper.CommunityInfoLightDTO());

现在所有对此的调用都将被视为有效。

编辑1:为什么要使用IgnoreArguments()?因为有时你需要嘲笑大对象,也许你只想测试它的一小部分。 当我有对象作为参数时,我通常使用它。 另一种避免使用它的方法是对两个对象使用相同的哈希码,一个用于记录,一个用作回放中的参数。