Как фальшивые фреймворки (в .Net) создают фиктивные объекты? - PullRequest
12 голосов
/ 27 августа 2010

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

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

1 Ответ

16 голосов
/ 27 августа 2010

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

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

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

ОБНОВЛЕНИЕ: С веб-сайта TypeMock :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...