Pregunta

¿Podría alguien explicar por qué ambas pruebas que usan las últimas versiones de los marcos Moq y Rhino.Mocks no se quejan de que Bar no es un método virtual / reemplazable:

public interface IFoo
{
    string Bar();
}

public class Foo : IFoo
{
    public string Bar()
    {
        return "Bar";
    }
}

[TestMethod]
public void MoqTest()
{
    var foo = new Mock<Foo>();
    foo.Setup(f => f.Bar()).Returns("abc");
    Assert.AreEqual("abc", foo.Object.Bar());
}

[TestMethod]
public void RhinoTest()
{
    var foo = new MockRepository().PartialMock<Foo>();
    foo.Expect(f => f.Bar()).Return("abc");
    foo.Replay();
    Assert.AreEqual("abc", foo.Bar());
}

Si declaro el método Bar como virtual, ambas pruebas pasan. No entiendo por qué tengo que declarar a Bar como virtual. ¿No es ya virtual? Viene de la interfaz.

¿Fue útil?

Solución

Virtual es parte de la clase, no de la interfaz, por lo que si desea anular el método en la clase Foo, deberá declararlo como virtual.

Sin embargo, como Krzysztof menciona si todo lo que necesita son los métodos en la interfaz IFoo, entonces debe burlarse de la interfaz.

Otros consejos

Porque te estás burlando de la clase Foo. Simulacros de IFfra intefrace

var foo = new MockRepository().PartialMock<IFoo>();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top