ASP.NET系列:单元测试之SmtpClient

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

使用SmtpClient发送Email时,我们可以创建ISmtpClient接口和SmtpClientWrapper适配类,在单元测试中对ISmtpClient进行Mock或自定义FackeSmtpClient,但nDumbster的Facke SMTP Server给我们提供了更直观更简单的方式进行单元测试。可以通过Nuget搜索nDumbster,这里使用的是netDumbster。

1.IEmailSender接口publicinterfaceIEmailSender

{voidSendMail(stringfrom,stringto,stringsubject,stringbody);

}

2.SMTPAdapter实现类publicinterfacepublicclassSMTPAdapter : IEmailSender

{publicvoidSendMail(stringfrom,stringto,stringsubject,stringbody)

{varmessage =newMailMessage();

message.IsBodyHtml=true;

message.From=newMailAddress(from);

message.To.Add(newMailAddress(to));

message.Subject=subject;

message.Body=body;using(varsmtpClient =newSmtpClient())

{if(smtpClient.Host ==null)

{

smtpClient.Host="localhost";

}

smtpClient.Send(message);

}

}

}

3.使用nDumbster单元测试publicclassSMTPAdapterTest

{

[Fact]publicvoidSendMailTest()

{

SimpleSmtpServer server= SimpleSmtpServer.Start(25);

IEmailSender sender=newSMTPAdapter();

sender.SendMail("sender@here.com","receiver@there.com","subject","body");

Assert.Equal(1, server.ReceivedEmailCount);

SmtpMessage mail= (SmtpMessage)server.ReceivedEmail[0];

Assert.Equal("sender@here.com", mail.Headers["From"]);

Assert.Equal("receiver@there.com", mail.Headers["To"]);

Assert.Equal("subject", mail.Headers["Subject"]);

Assert.Equal("body", mail.MessageParts[0].BodyData);

server.Stop();

}

}

运行结果:

[flash=500,400]http://s1.knowsky.com/20160211/oxy4v51yobx18.png[/flash]

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航