¿Por qué Rhino.Mocks y Moq dicen que Bar es un miembro no reemplazable?
-
19-08-2019 - |
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.
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