在Microsoft .Net Framework环境中,我非常好奇模拟框架(Rhino Mocks、Moq、NMock等)如何根据给定类型创建模拟对象。
我对某种方法的具体机制很感兴趣,或者如果它们使用不同的方法,也许可以概述不同的方式。另外,如果有人能指向一些文章,那就太好了。
我对某种方法的具体机制很感兴趣,或者如果它们使用不同的方法,也许可以概述不同的方式。另外,如果有人能指向一些文章,那就太好了。
有不同的技术可以进行mocking。
一些mocking库例如Moq和RhinoMocks使用Castle Dynamic proxies。它们实质上使用反射和运行时代码生成(CodeDom)来动态生成类,这些类要么实现了被mock的接口,要么派生自正在被mock的非密封类。
TypeMock则有所不同-它使用Profiler APIs来拦截并重定向调用任何类型的任何方法。这使它能够mock密封类型、系统类,甚至拦截和转移具体类型的非虚方法的调用。
更新:来自TypeMock网站:
Typemock Isolator使用面向切面编程设计创建一个mock aspect。内部使用.NET框架分析器API监视应用的执行,当方法被调用时,CLR会通知Typemock Isolator。此框架可以返回mock值并完全覆盖原始代码。