Да, вы можете!
Нет необходимости говорить, что это плохой дизайн, но вы уже знаете это и не можете его изменить. Если необходимо, вы можете попытаться частичное издевательство над классом.
РЕДАКТИРОВАТЬ: Просто понял, что мой пример использует Java, а не C #. Тем не менее, @Guillaume предлагает пример кода для C #. По-видимому, он даже встроен в API времени выполнения!
В Java, с Mockito , это работает:
C c = Mockito.mock(C);
Mockito.doCallRealMethod().when(c).M();
// If M() isn't a void method
// when(c.M()).thenCallRealMethod();
c.M();
Однако в этом случае M()
не может зависеть от какого-либо состояния, установленного в конструкторе.
Для получения дополнительной информации о частичной насмешке, посмотрите этот FAQ Вопрос Тем не менее, насмешка в основном используется для тестирования.