2010-08-27 12 views
12

Nel contesto di Microsoft .Net Framework, sono davvero curioso di sapere come i framework mocking (Rhino Mocks, Moq, NMock, ecc.) in realtà creano gli oggetti fittizi di un determinato tipo.In che modo i framework di simulazione (in .Net) creano oggetti fittizi?

Mi interessa sia i meccanismi specifici di un metodo o, se usano metodi diversi, forse alcune panoramica dei diversi modi. In alternativa, se qualcuno potesse indicarmi alcuni articoli, sarebbe fantastico.

+0

Questa è una buona domanda. È possibile rilasciare l'assieme in Reflector e dare un'occhiata al codice per iniziare. – fletcher

+3

Si consiglia di dare un'occhiata a Castle DynamicProxy - http://www.castleproject.org/dynamicproxy/index.html. Un sacco di framework di derisione .NET usano questo sotto il cofano. –

+0

Come menzionato per il fletté, [redgate Reflector] (http://www.red-gate.com/products/reflector/) è un ottimo programma per capire cosa sta succedendo all'interno di un assembly compilato. È davvero facile come trascinare e rilasciare la DLL in Reflector e ispezionare il codice. –

risposta

16

Ci sono diverse tecniche là fuori per scherno.

Alcune librerie di derisione come Moq e RhinoMocks utilizzano Castle Dynamic proxies. Essenzialmente, usano la generazione di codice di riflessione e runtime (CodeDom) per generare dinamicamente classi che implementano un'interfaccia che viene derisa, o derivano da una classe non sigillata che viene derisa.

TypeMock è un po 'diverso: utilizza le API di Profiler per intercettare e reindirizzare le chiamate a qualsiasi metodo su qualsiasi tipo. Ciò lo rende capace di prendere in giro tipi sigillati, classi di sistema e persino intercettare e deviare le chiamate verso metodi non virtuali di tipi concreti.

UPDATE: Dal TypeMock website:

Typemock Isolator utilizza un disegno di programmazione Aspect- Oriented che crea un aspetto finto. Internamente, lo utilizza l'API .NET profiler framework per monitorare l'esecuzione di un'applicazione. Quando viene chiamato un metodo, CLR notifica Typemock Isolator. Il framework può quindi restituire valori simulati e ignorare completamente il codice originale .

+0

Vuol JustMock anche utilizzare Debugger API? (A proposito, ho pensato che fosse l'API Profiler?) –

+0

Link a profiling API - http://msdn.microsoft.com/en-us/magazine/cc301725.aspx –

+0

@Russ Cam: ho letto su di esso ad un certo punto , e mi sembra di ricordare che ha usato le API di debug per intercettare la creazione e la finalizzazione degli oggetti. Può utilizzare anche le API del profiler, poiché sono adatte al tipo di cose che fa. Tuttavia, non sono sicuro al 100% e al momento non riesco a trovare il documento correlato. – LBushkin

Problemi correlati