嘲笑新實例,我想嘲笑都MailMessage
和SmptpClient
如何使用起訂量
public void SendEmail(string emailAddress, string subject, string body)
{
using (var mail = new MailMessage(NoReplyEmailAddress, emailAddress))
{
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
using (var client = new SmtpClient())
{
client.Host = SmtpHost;
client.Port = SmtpPort;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(mail);
}
}
}
和我的測試方法測試使用MOQ下面的方法是:
public void TestSendEmail()
{
Mock<MailMessage> mailMessageMock = new Mock<MailMessage>();
MailMessage message = (MailMessage)mailMessageMock.Setup(m => new MailMessage()).Returns(mailMessageMock.Object);
Mock<SmtpClient> smtpClientMock = new Mock<SmtpClient>();
smtpClientMock.Setup(s => new SmtpClient()).Returns(smtpClientMock.Object);
EmailService emailService = new EmailService();
emailService.SendEmail("[email protected]","Test Mail", "Content");
mailMessageMock.Verify(m => m.Subject);
mailMessageMock.Verify(m => m.Body);
mailMessageMock.Verify(m => m.IsBodyHtml);
smtpClientMock.Verify(s=>s.Host);
smtpClientMock.Verify(s=>s.Port);
smtpClientMock.Verify(s=>s.DeliveryMethod);
smtpClientMock.Verify(s=>s.Send(message));
}
但它不工作是無論如何要做到這一點?
你可以闡述* 「不工作」 *? –
我們應該如何知道你的意思是「它不工作」?你想讓我們猜測嗎? –
如果它們在方法內部出現,你就不能嘲笑它們。它們必須作爲依賴項注入,或者作爲可以被嘲笑的虛擬方法分離出來。我在這裏有一些指導:https://contrivedexample.com/2016/11/26/testing-the-un-testable/ – Crowcoder