Rhino Mocks: ExpectationViolationException, хотя вызовы в ожидаемом порядке - PullRequest
1 голос
/ 08 сентября 2011

У меня проблема с Носорогами Носорогов.Мой метод Test выглядит следующим образом:

        MockRepository mocks = new MockRepository();
        IServiceCalls serviceCallsMock = mocks.StrictMock<IServiceCalls>();
        _controller.ServiceCalls = serviceCallsMock;

        using (mocks.Record())
        {
            serviceCallsMock.GetX(2);
            LastCall.Return(new List<X> { new X{ Id = 1 } });

            serviceCallsMock.SetX(new X{ Id = 2 });
        }

        _controller.Index();

        mocks.Verify(serviceCallsMock);

Вызовы в методе _controller.Index () расположены в правильном порядке и с правильными параметрами.Но я получаю следующую ошибку:

Rhino.Mocks.Exceptions.ExpectationViolationException
 IServiceCalls.SetX(Namespace.X); Expected #0, Actual #1.
 IServiceCalls.SetX(Namespace.X); Expected #1, Actual #0.

Кто-нибудь знает, что я делаю не так?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Проблема в этой строке:

serviceCallsMock.SetX(new X{ Id = 2 });

Теперь предполагается, что mock будет вызываться именно с этим экземпляром X.
Возможно, вам следует использовать ограничения аргумента.Попробуйте что-то вроде

Is.Matching<X>(delegate(X) x 
  { return x.Id == 2; } )

См. Краткий справочник по Rhino Mocks для получения более подробной информации.

0 голосов
/ 08 сентября 2011

Прежде всего - попробуйте использовать Rhino Mocks 3.5 синтаксис, это намного проще
Во-вторых, вы должны войти в состояние воспроизведения после того, как вы установили свои ожидания и начали собственно тестирование следующим образом:

using (mocks.Playback())   {   _controller.Index()   }

3.5 Синтаксис должен быть примерно таким:

    MockRepository mocks = new MockRepository();
    IServiceCalls serviceCallsMock = MockRepository.GenerateMock<IServiceCalls>();
    _controller.ServiceCalls = serviceCallsMock;
    serviceCallsMock.Expect(x => x.GetX(2)).Return(new List<X> { new X{ Id = 1 } });
    _controller.Index();
    serviceCallsMock.VerifyAllExpectations()
...