Почему мой метод PartialMock игнорирует мои ожидания - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть базовый класс, который я использую как PartialMock, как таковой.

1  IContextManager contextManager = mocks.StrictMock<IContextManager>();
2  target = mocks.PartialMock<EnumerationServiceBase>(new object[] { contextManager });
3  Expect.Call(delegate { contextManager.RemoveContext(guid); });
4  mocks.ReplayAll();
5  actual = target.ReleaseOp(request);

target.ReleaseOp (запрос) имеет вызов метода contextManager.RemoveContext, который я установиложидание в строке 3, но я все еще получаю следующую ошибку

Rhino.Mocks.Exceptions.ExpectationViolationException: IContextManager.RemoveContext ("e04c757b-8b70-4294-b133-94fd6b52ba04");Ожидаемый # 0, фактический # 1.

Это первый тест, в котором это не сработало (остальные 45 или около того хороши), но это также первый тест, использующий А) частичный макети B) смоделированный метод, который возвращает void.Есть идеи?

1 Ответ

1 голос
/ 15 апреля 2011

Это первый тест, в котором это не сработало (остальные 45 или около того хороши), но это также первый тест, использующий A) частичный макет и B) поддельный метод, которыйвозвращает недействительнымЛюбые идеи?

A) PartialMock означает, что Rhino будет перехватывать вызовы методов только , если у него есть ожидание.Я думаю, что вы используете здесь хорошо.

B) Пустые методы тоже не должны быть проблемой.

Скорее всего, ваша проблема в ваших ожиданиях:

Expect.Call(delegate { contextManager.RemoveContext(guid); });

guid в вашем ожидании должен быть тем же экземпляром, что и guid, переданный target.

Попробуйте это:

Expect.Call(delegate { contextManager.RemoveContext(guid); }).IgnoreArguments();

// you can also use fluent syntax like this:
// contextManager.Expect(x => x.RemoveContext(guid)).IgnoreArguments();

Если это работает, вы можете быть довольноубедитесь, что ваш тестовый гид и реальный гид, используемый в вашем классе, не совпадают.

...