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

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

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

12
задан Matt 27 August 2010 в 18:55
поделиться

1 ответ

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

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

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

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

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

16
ответ дан 2 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: