У меня есть класс, например DerivedClass, который наследуется от базового класса, например BaseClass. BaseClass реализует интерфейс под названием IBaseClass. IBaseClass имеет 1 свойство с именем TestProperty, которое является целочисленным автоматическим свойством.
Я PartialMultiMock DerivedClass примерно так:
derivedClassMock = repository.PartialMultiMock<DerivedClass>(typeof(IBaseInterface));
Затем я установил ожидание следующим образом:
derivedClassMock.Expect(d => d.TestProperty).Return(141);
но я получаю следующее исключение:
"Недопустимый вызов, последний вызов был использован или не было сделано (убедитесь, что вы вызываете виртуальный (C #) / переопределенный (VB) метод)."
Если я отмечу реализации TestProperty в BaseClass как виртуальные, все работает, но я пытаюсь понять, почему это необходимо. Если бы DerivedClass реализовал IBaseInterface, мне не нужно было бы отмечать его как виртуальный, чтобы получить функциональность частичного макета. (по крайней мере, я так думаю - поправьте меня, если я ошибаюсь)
Затем я пошел немного дальше и попытался наложить мульти-макет на IBaseInterface и установить ожидаемое значение следующим образом:
var derivedInterface = (IBaseInterface) derivedClassMock;
derivedInterface.Expect(d => d.TestProperty).Return(1);
Этот тест теперь выполняется без исключений, но значение, возвращаемое из TestProperty, не равно 1, как ожидалось, а 0, то есть значение по умолчанию int. Это подсказывает мне поведение, похожее на заглушку.
Может ли кто-нибудь объяснить, если это возможно, чтобы помочь мне понять это немного лучше, поскольку я запутался? Могу ли я частично не макетировать класс с унаследованным интерфейсом, и почему при настройке ожидания на интерфейсе поведение выглядит как заглушка?
Заранее спасибо.