[TestMethod]
public void TestMethod1()
{
var mock = new Mock<EmailService>();
mock.Setup(x => x.SendEmail()).Returns(true);
var cus = new Customer();
var result = cus.AddCustomer(mock.Object);
Assert.IsTrue(result);
}
public class Customer
{
public bool AddCustomer(EmailService emailService)
{
emailService.SendEmail();
Debug.WriteLine("new customer added");
return true;
}
}
public class EmailService
{
public virtual bool SendEmail()
{
throw new Exception("send email failed cuz bla bla bla");
}
}
El método EmailService.SendEmail
debe ser virtual para simularlo. ¿Hay alguna forma de burlarse de los métodos no virtuales?¿Cómo burlarse de métodos no virtuales?
Creo que el uso de esta técnica es bueno, y sin duda hay ventajas en el uso de interfaces. Pero si está evaluando entre las dos opciones para que un método no virtual sea burlable: 1) hacerlo virtual, 2) usarlo como parte de la interfaz, ¿cuál es la ventaja de 2 sobre 1? Incluso si elige 2, entonces está haciendo que el método sea virtual, ya que ahora es parte de una interfaz. – zumalifeguard