radu florescu
radu florescu

Reputation: 4353

RhinoMocks exception that has no meaning

 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

The 2 classes PagingInfo are 2 instances but have the same values and are verified before with asserts.

Here is the unit test code

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

Upvotes: 1

Views: 1583

Answers (2)

radu florescu
radu florescu

Reputation: 4353

problem solved :

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

Now all calls to this ,will be considered valid.

Edit 1: Why you should use IgnoreArguments()? Because sometimes you have big objects that need to be mocked and maybe you only want to test a small part of it. I usually use it when i have objects as parameters. Another way to avoid using it is by using same hashcode to both objects, the one used for record and the one used as param in playback.

Upvotes: 1

Phil Sandler
Phil Sandler

Reputation: 28016

As Daniel noted, share some code.

My best guess: you have created a strict mock, and your test is causing something to happen to on the mock ("Actual #1") that was not expected ("Expected #0"). Nothing on can happen on a strict mock that wasn't explicitly configured in the Arrange phase.

Upvotes: 2

Related Questions