转载

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

使用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();     } } 
原文  http://www.cnblogs.com/easygame/p/5181160.html
正文到此结束
Loading...