Ответ 1
Существуют разные методы для издевательств.
Некоторые издевательства, такие как Moq и RhinoMocks используйте Замок динамических прокси. По сути, они используют генерацию кода отражения и времени выполнения (CodeDom) для динамического создания классов, которые либо реализуют интерфейс, издевающийся, либо получают из непечатаемого класса, который насмехается.
TypeMock немного отличается - он использует API-интерфейс Profiler для перехвата и перенаправления вызовов на любой метод любого типа. Это делает его способным издеваться над закрытыми типами, системными классами и даже перехватывать и переадресовывать вызовы на не виртуальные методы конкретных типов.
ОБНОВЛЕНИЕ: Из сайта TypeMock:
Typemock Isolator использует Aspect- Ориентированный дизайн программирования, который создает макет. Внутренне это использует API-интерфейс профилирования .NET framework для контроля выполнения приложения. Когда вызывается метод, CLR уведомляет Typemock Isolator. каркас может затем высмеивать значения и переопределить исходный код полностью.