发送异步邮件的单元测试

本文关键字:单元测试 异步 | 更新日期: 2023-09-27 18:34:38

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

发送异步邮件的单元测试

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

你可以从这里得到它

在开发计算机上运行后,您可以发送电子邮件设置 smtp。托管到"本地主机"并使用虚拟电子邮件地址。

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