[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");
}
}
EmailService.SendEmail
方法必須虛擬來模擬它。有什麼辦法來模擬非虛擬方法嗎?如何模擬非虛擬方法?
我認爲使用這種技術很好,而且使用接口肯定有優勢。但是如果你在兩種選擇之間評估非虛擬方法是可嘲弄的:1)使其成爲虛擬的,2)將它用作接口的一部分,2的優勢是什麼?即使你選擇了2,那麼你也有效地使該方法成爲虛擬的,因爲它現在成爲界面的一部分。 – zumalifeguard 2015-06-25 17:10:40