单元测试之SmtpClient

发表于:2016-2-24 11:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:#王刚    来源:51Testing软件测试网采编

  使用SmtpClient发送Email时,我们可以创建ISmtpClient接口和SmtpClientWrapper适配类,在单元测试中对ISmtpClient进行Mock或自定义FackeSmtpClient,但nDumbster的Facke SMTP Server给我们提供了更直观更简单的方式进行单元测试。可以通过Nuget搜索nDumbster,这里使用的是netDumbster。
  1.IEmailSender接口
  public interface IEmailSender
  {
  void SendMail(string from, string to, string subject, string body);
  }
  2.SMTPAdapter实现类
public interfacepublic class SMTPAdapter : IEmailSender
{
public void SendMail(string from, string to, string subject, string body)
{
var message = new MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(from);
message.To.Add(new MailAddress(to));
message.Subject = subject;
message.Body = body;
using (var smtpClient = new SmtpClient())
{
if (smtpClient.Host == null)
{
smtpClient.Host = "localhost";
}
smtpClient.Send(message);
}
}
}
  3.使用nDumbster单元测试
public class SMTPAdapterTest
{
[Fact]
public void SendMailTest()
{
SimpleSmtpServer server = SimpleSmtpServer.Start(25);
IEmailSender sender = new SMTPAdapter();
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();
}
}
  运行结果:
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号