SendAsync Mail的单元测试

时间:2014-12-17 13:32:51

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

今天我正在尝试在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)
    {

    }

}

1 个答案:

答案 0 :(得分:1)

您可能需要的是虚拟开发S​​MTP服务器。

您可以从here

获取

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

然而,如评论中所述,这样的单元测试完全没有用,因为电子邮件是否成功发送取决于许多外部因素,例如网络连接。如果您在本地计算机上通过测试,则并不意味着每次在生产服务器上发送电子邮件都会成功。