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