Moles - это среда изоляции, созданная Microsoft. Замечательная особенность Moles заключается в том, что он может "высмеять" статические/не виртуальные методы и запечатанные классы (что невозможно в рамках таких фреймворков, как Moq). Ниже приведена краткая демонстрация того, что может сделать Моулс:
Assert.AreNotEqual(new DateTime(2012, 1, 1), DateTime.Now);
// MDateTime is part of Moles; the below will "override" DateTime.Now behavior
MDateTime.NowGet = () => new DateTime(2012, 1, 1);
Assert.AreEqual(new DateTime(2012, 1, 1), DateTime.Now);
Похоже, Moles может модифицировать тело CIL, например, DateTime.Now
во время выполнения. Поскольку Moles не является открытым исходным кодом, мне любопытно узнать, какой механизм использует Moles, чтобы модифицировать методы CIL во время выполнения. Может ли кто-нибудь пролить свет?