【问题标题】:Unit Test for SendAsync MailSendAsync 邮件的单元测试
【发布时间】:2014-12-17 13:32:50
【问题描述】:

今天我正在尝试在 Visual Studio 中创建一个用于发送电子邮件的单元测试,我正在努力寻找最好的方法并使用 SendCompleted 事件作为实际发送消息的验证。

我在这里申请发送电子邮件的代码,但在使用了许多不同的方式后,我只是在这里粘贴干净的代码,也许你可以告诉我我做错了什么或给我更好的方法来解决它。

这是我迄今为止尝试过的代码:

[TestClass]
public class sendEmailTest
{
    [TestMethod]
    public void sendAsyncEmailTest()
    {
        string from = "sender@test.com";
        string to = "receiver@test.com";
        MailMessage mail = new MailMessage(from, to);

        mail.Subject = "Unit Test MVC";
        mail.Body = "Unit Test for sending mail in MVC app";
        mail.IsBodyHtml = true;
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.test.com";
        smtp.EnableSsl = true;
        NetworkCredential networkCredential = new NetworkCredential(from, "testpassword");
        smtp.UseDefaultCredentials = true;
        smtp.Credentials = networkCredential;
        smtp.Port = 587;
        smtp.SendAsync(mail, null);

        smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);
    }
    static void smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {

    }

}

【问题讨论】:

  • 关于如何改进代码的一般问题应该去codereview.stackexchange.com Stackoverflow 是针对更具体的问题。
  • 我不明白这个问题。你能解释一下问题或疑问是什么吗?你所做的也不是单元测试。单元测试意味着隔离测试。它不应该依赖于你正在做的任何事情。
  • 您真的在对外部服务进行单元测试吗?好像有点过分了。也要对 IIS 进行单元测试?
  • @Oswald 我很确定这不是代码审查问题。
  • @SriramSakthivel 我是单元测试的新手,此时最重要的问题是如何执行单元测试以发送电子邮件?

标签: c# asp.net .net asp.net-mvc unit-testing


【解决方案1】:

您可能需要的是虚拟开发 SMTP 服务器。

您可以从here获取它

一旦它在您的开发机器上运行,您就可以发送电子邮件,将 smtp.Host 设置为“localhost”并使用虚拟电子邮件地址。

但是,正如 cmets 中提到的那样,这样的单元测试根本没有用,因为电子邮件是否成功发送取决于许多外部因素,例如网络连接。如果您在本地机器上通过了测试,这并不意味着每次在生产服务器上发送电子邮件都会成功。

【讨论】:

  • 这不是单元测试,而是集成测试。而且它没用,因为它正在测试 .NET 框架功能。你测试的是你的代码,而不是微软的代码。
  • 感谢您在此之后的回答,我决定放弃现在看起来很愚蠢的想法......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多