Исключение RhinoMocks, которое не имеет смысла - PullRequest
1 голос
/ 13 июля 2011
 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 ]

2 голосов
/ 13 июля 2011

Как заметил Дэниел, поделитесь некоторым кодом.

Мое лучшее предположение: вы создали строгий макет, и ваш тест приводит к тому, что на макете («Actual # 1») происходит нечто, чего не былоожидается («Ожидаемый # 0»).Ничего не может произойти со строгим макетом, который не был явно настроен на этапе аранжировки.

1 голос
/ 14 июля 2011

проблема решена:

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 ()?Потому что иногда у вас есть большие объекты, которые нужно смоделировать, и, возможно, вы захотите протестировать только небольшую их часть.Я обычно использую его, когда у меня есть объекты в качестве параметров.Другой способ избежать его использования - использовать один и тот же хэш-код для обоих объектов, один из которых используется для записи, а другой - в качестве параметра при воспроизведении.

...