Moles隔离框架是如何实现的?Moles是Microsoft创建的隔离框架。Moles的一个很酷的特性是它可以“模拟”静态/非虚拟方法和密封类(这对于像Moq这样的框架是不可能的)。这是Moles可以做什么的快速演示:Assert.AreNotEqual(newDateTime(2012,1,1),DateTime.Now);//MDateTime是Moles的一部分;下面将“覆盖”DateTime.Now的行为MDateTime.NowGet=()=>newDateTime(2012,1,1);Assert.AreEqual(newDateTime(2012,1,1),DateTime.Now);看起来Moles能够在运行时修改CIL主体,例如DateTime.Now。由于Moles不是开源的,我很想知道Moles使用什么机制在运行时修改方法的CIL。谁能逃得过光?Moles实现了一个CLR探查器(特别是ICorProfilerCallback接口),允许在.NET运行时将它们编译成汇编代码之前重写MSIL方法体。这是通过JitCompileStarted回调专门完成的。在每个方法中,Moles都引入了一个绕道,看起来像这样:;如果(d!=null)返回d();...//originalbody}}}在设置mole时,您的委托将存储在底层的__Detours字典中,该字典会在执行find方法时检索。这就像您想要的任何程序集的包装器一样工作,例如mscorlib(此示例基于mscorlibMolesAssemblyWrapper)。这使您能够用编码器编写的代理替换任何.NET方法。这不是自动的。在开始之前,您必须首先创建,将带有程序集列表的MolesXML配置文件添加到“Wrapper”并传递此代码,Moles从配置文件中生成对该程序集的引用。并且必须在这个文件里加上usingnamespaceSystem.Moles,在函数[HostType("Moles")]上面是C#学习教程:如何实现Moles隔离框架?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
