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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("[email protected]", "[email protected]", "subject", "body");
        Assert.Equal(1, server.ReceivedEmailCount);
        SmtpMessage mail = (SmtpMessage)server.ReceivedEmail[0];
        Assert.Equal("[email protected]", mail.Headers["From"]);
        Assert.Equal("[email protected]", mail.Headers["To"]);
        Assert.Equal("subject", mail.Headers["Subject"]);
        Assert.Equal("body", mail.MessageParts[0].BodyData);
        server.Stop();
    }
}

以上是关于ASP.NET 系列:单元测试之SmtpClient的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 系列:单元测试

ASP.NET 系列:单元测试

asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)

单元测试 ASP.NET Web API

ASP.NET-MVC:数据库默认值会破坏单元测试的精神吗? [关闭]

csharp Asp.Net单元测试