zoukankan      html  css  js  c++  java
  • 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();
        }
    }

    运行结果:

  • 相关阅读:
    Android中实现下拉刷新
    Android中Parcelable接口用法
    Android px、dp、sp之间相互转换
    Android平台调用WebService详解
    Android开发之WebService介绍
    Xamarin.Forms XAML控件的公共属性
    构建伪Update服务器工具isr-evilgrade
    Xcode文件名后的字母含义
    设置USB数据监听
    Xamarin.Forms的基本页面和基本视图
  • 原文地址:https://www.cnblogs.com/easygame/p/5181160.html
Copyright © 2011-2022 走看看