Moles是微软创建的隔离框架。Moles 的一个很酷的特性是它可以“模拟”静态/非虚拟方法和密封类(这在像 Moq 这样的框架中是不可能的)。下面是 Moles 可以做什么的快速演示:
Assert.AreNotEqual(new DateTime(2012, 1, 1), DateTime.Now);
// MDateTime is part of Moles; the below will "override" DateTime.Now's behavior
MDateTime.NowGet = () => new DateTime(2012, 1, 1);
Assert.AreEqual(new DateTime(2012, 1, 1), DateTime.Now);
似乎 Moles 能够DateTime.Now
在运行时修改 CIL 主体。由于 Moles 不是开源的,我很想知道 Moles 使用哪种机制来在运行时修改方法的 CIL。任何人都可以解释一下吗?