Родинок - это изолирующая структура, созданная Microsoft. Отличная особенность Moles заключается в том, что он может «высмеивать» статические / не виртуальные методы и запечатанные классы (что невозможно в таких средах, как Moq). Ниже приведена краткая демонстрация того, что могут делать кроты:
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 может изменять тело CIL таких вещей, как DateTime.Now
во время выполнения. Поскольку Moles не является открытым исходным кодом, мне любопытно узнать, какой механизм Moles использует для изменения CIL методов во время выполнения. Кто-нибудь может пролить свет?