2010-08-27 12 views
12

Microsoft .Net Framework bağlamında, gerçekte alay çerçevelerinin (Rhino Mocks, Moq, NMock, vb.) aslında belirli türden sahte nesneleri oluşturduğunu merak ediyorum.Alaycı çerçeveler (.Net) sahte nesneleri nasıl oluşturur?

Bir yöntemin özel mekaniği ile ilgileniyorum ya da farklı yöntemler kullanıyorlarsa belki de farklı yollara genel bir bakış. Alternatif olarak, eğer herkes bana bazı makalelere işaret ederse, bu da harika olur.

+0

Bu iyi bir sorudur. Montajı Reflektör'e bırakabilir ve başlamak için koda bakabilirsiniz. – fletcher

+3

Castle DynamicProxy - http://www.castleproject.org/dynamicproxy/index.html adresine bir göz atmak isteyebilirsiniz. .NET alay çerçevelerinin birçoğu bunu başlık altında kullanıyor. –

+0

Belirtildiği gibi, [redgate Reflektör] (http://www.red-gate.com/products/reflector/) derlenmiş bir derlemede neler olup bittiğini anlamak için harika bir programdır. DLL'yi Reflektör'e sürükleyip bırakmak ve kodu incelemek kadar kolay. –

cevap

16

Alay etmek için farklı teknikler var. Moq ve RhinoMocks kullanım Castle Dynamic proxies gibi

Bazı alaycı kütüphanelerine. Esas olarak, alay edilmekte olan bir arabirimi uygulayan veya alay edilmeyen mühürlenmemiş bir sınıftan türeyen sınıfları dinamik olarak oluşturmak için yansıma ve çalışma zamanı kodu oluşturma (CodeDom) kullanırlar.

TypeMock biraz farklıdır - herhangi bir yöntemdeki herhangi bir yönteme çağrıları engellemek ve yönlendirmek için Profiler API'lerini kullanır. Bu, mühürlenmiş türleri, sistem sınıflarını alay edebilmeyi ve hatta çağrıları sanal olmayan sanal tip yöntemlere ayırmayı ve yönlendirmeyi sağlar.

GÜNCELLEME:

Typemock İzolatörler sahte yönünü oluşturan bir Aspect- yönelimli programlama tasarım kullanır: TypeMock website itibaren. Dahili olarak, bir uygulamanın yürütülmesini izlemek için .NET framework profiler API kullanır. Bir yöntem çağrıldığında, CLR Typemock Isolator'a bildirir. çerçevesi daha sonra değerlerini atandı ve orijinal kodu tamamen geçersiz kılabilir.

+0

Mükemmel bir eğitici dizi buldum JustMock ayrıca Debugger API kullanıyor mu? (BTW, Profiler API'sı olduğunu düşündüm?) –

+0

Profil oluşturma API'sine bağlantı - http://msdn.microsoft.com/en-us/magazine/cc301725.aspx –

+0

@Russ Cam: Bir noktada bunu okudum ve hatırladım, nesne oluşturma ve sonlandırmayı engellemek için hata ayıklama API'lerini kullandı. Profiler API'larını da kullanabilir, çünkü bu tür şeylere çok uygundur. Ancak,% 100 emin değilim ve şu anda ilgili dokümanı bulamıyorum. – LBushkin