加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 我应该如何测试从控制器发送电子邮件?

发布时间:2020-12-16 03:50:22 所属栏目:asp.Net 来源:网络整理
导读:我开始进行单元测试并尝试做一些TDD.我已经阅读了很多关于这个主题的内容,并写了一些测试.我只是想知道以下是否是正确的方法. 我想在我的网站上添加通常的“联系我们”设施.你知道的事情,用户用他们的电子邮件地址填写表格,输入一条简短的信息,然后按一个按
我开始进行单元测试并尝试做一些TDD.我已经阅读了很多关于这个主题的内容,并写了一些测试.我只是想知道以下是否是正确的方法.

我想在我的网站上添加通常的“联系我们”设施.你知道的事情,用户用他们的电子邮件地址填写表格,输入一条简短的信息,然后按一个按钮发回表格.

模型绑定器执行它们的操作,我的操作方法接受发布的数据作为模型.然后,操作方法将解析模型并使用smtp向网站管理员发送电子邮件,让他/她填写有人在其网站上填写联系表单.

现在问题….为了测试这个,我是否正确创建一个接口IMessageService,它有一个方法Send(emailAddress,message)来接受电子邮件地址和消息体.在具体类中实现接口,让该类处理smtp的东西并实际发送邮件.

如果我将接口作为参数添加到我的控制器构造函数中,那么我可以使用DI和IoC将具体类注入控制器.但是在进行单元测试时,我可以创建我的IMessageService的伪造或模拟版本并对其进行断言.

我问的原因是我看过其他人为SmtpClient生成接口然后嘲笑它的例子.真的有必要走那么远,还是我不理解这些东西?

解决方法

您仍然需要测试调用邮件程序的类.我建议你可能想要做两件事.我通常创建一个IMailClient接口和一个实现接口的SmtpClient包装器.在代理类中使用(并注入)接口,该代理类知道如何构造消息并将其发送(它可能有几个工厂类型的方法,可以构造多种不同类型的消息). SmtpClient周围的垫片应该就是这样,因此几乎不需要进行单元测试.您可以在测试代理类时模拟填充程序,并在测试控制器时模拟代理类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读