ASP.NET 系列:单元测试之SmtpClient
2016-02-04 11:06
916 查看
使用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(); } }
运行结果:
相关文章推荐
- [译] ASP.NET 生命周期 – ASP.NET 上下文对象(五)
- 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity
- 学习asp.net比较完整的流程
- ASP.NET MVC 自定义后缀路由设置
- ASP.NET MVC 自定义后缀路由设置
- asp.net下载文件几种方式
- ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)
- ASP.NET Identity简介
- Asp.Net MVC过滤器小试牛刀
- asp.net(C#)之NPOI"操作Excel
- Win7旗舰版中的IIS配置asp.net的运行环境
- ASP.NET Identity系列教程(目录)
- 对安卓中Handle机制的一些见解
- ASP.NET 系列:单元测试之Log4Net
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案
- asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(四)
- 个人笔记 asp 10 asp随机数
- Raspbian 2019-06-20 发布,基于即将发布的Debian 10
- raspberrypi监控室内温度