Подтвердить что ты не робот

Как издевательские рамки (в .Net) создают макет объектов?

В контексте Microsoft.Net Framework мне действительно интересно, как фальшивые фреймворки (Rhino Mocks, Moq, NMock и т.д.) фактически создают макет объектов из заданного типа.

Меня интересует либо конкретная механика одного метода, либо, если они используют разные методы, возможно, некоторый обзор различных способов. Или, если кто-нибудь может указать мне на некоторые статьи, это тоже будет здорово.

4b9b3361

Ответ 1

Существуют разные методы для издевательств.

Некоторые издевательства, такие как Moq и RhinoMocks используйте Замок динамических прокси. По сути, они используют генерацию кода отражения и времени выполнения (CodeDom) для динамического создания классов, которые либо реализуют интерфейс, издевающийся, либо получают из непечатаемого класса, который насмехается.

TypeMock немного отличается - он использует API-интерфейс Profiler для перехвата и перенаправления вызовов на любой метод любого типа. Это делает его способным издеваться над закрытыми типами, системными классами и даже перехватывать и переадресовывать вызовы на не виртуальные методы конкретных типов.

ОБНОВЛЕНИЕ: Из сайта TypeMock:

Typemock Isolator использует Aspect- Ориентированный дизайн программирования, который создает макет. Внутренне это использует API-интерфейс профилирования .NET framework для контроля выполнения приложения. Когда вызывается метод, CLR уведомляет Typemock Isolator. каркас может затем высмеивать значения и переопределить исходный код полностью.