martes, 14 de octubre de 2008

Moq 2.6: Mocks recursivos

Automocking con Moq

Una de las novedades de la versión 2.6 de nuestro framework de mocking preferido Moq es al automocking que no es otra cosa más que un mockign jerárquico, es decir si "mockeamos" un objeto (interface o lo que sea) y este tiene dentro otros objetos también se hace mocking de estos y podemos configurar un resultado o comportamiento de cualquiera de ellos, lo cual es muy práctico, veamos cómo funciona.

public interface IPersona
{
    string Nombre { get; set; }
    //La propiedad Direccion es otro objeto
    IDireccion Direccion { get; set; }
}

public interface IDireccion
{
    string Calle { get; set; }
    int Altura { get; set; }
}

[TestMethod]
public void AutoMocking()
{
    var mock = new Mock<IPersona>();

    //automáticamente se crea un mock object para la propiedad Dirección de modo lazy
    mock.Expect(persona => persona.Direccion.Calle).Returns("Cucha Cucha");

    Assert.AreEqual<string>("Cucha Cucha", mock.Object.Direccion.Calle);
}

No nos asustemos pensado que esto va a hacer que el automocking tome 40 segundos en crear un objeto hasta que resuelve todos los objetos que tiene dentro, la creación de los automocking es del tipo lazy, es decir, se crea sobre demanda, mágico. Saludos.