Почему мой метод PartialMock игнорирует мои ожидания

У меня есть базовый класс, который я использую как 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(request) есть вызов метода contextManager.RemoveContext, для которого я установил ожидание в строке 3, но я все еще получаю следующую ошибку

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

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

1 ответ

Решение

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

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

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

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

Expect.Call(delegate { contextManager.RemoveContext(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();

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

Другие вопросы по тегам