Como a estrutura de isolamento de toupeiras é implementada?
Moles é uma estrutura de isolamento criada pela Microsoft. Um recurso interessante do Moles é que ele pode "zombar" de métodos estáticos / não virtuais e de classes seladas (o que não é possível em estruturas como o Moq). Abaixo está a rápida demonstração do que a Moles pode fazer:
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);
Parece que Moles é capaz de modificar o corpo CIL de coisas comoDateTime.Now
em tempo de execução. Como o Moles não é de código aberto, estou curioso para saber qual mecanismo o Moles usa para modificar o CIL dos métodos em tempo de execução. Alguém pode lançar alguma luz?