使用来自Nunit的SendMailAsync发送电子邮件

时间:2016-06-01 06:18:53

标签: c# asynchronous

我正在试图理解为什么我无法发送异步邮件(可能与我从NUnit运行它有关吗?

当我做简单的smtp.Send(mail);时,它运作良好

// Nunit test
{
    [TestFixture]
    public class Tester
    {

        [Test]
        public void TestSendTestMail()
        {
            // Arrange

            // Act
            await EbayProxy.Instance.SendTestMail();

            // Assert
        }
    }

    public async Task SendTestMail()
    {
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(_mailFrom);
        mail.To.Add(_mailTo);

        mail.Subject = "Test Mail Subject Async";

        mail.Body = "Test Mail Body";

        mail.IsBodyHtml = true;

        SmtpClient smtp = new SmtpClient(_smtpClient, Convert.ToInt32(_smtpPort));
        smtp.EnableSsl = true;
        smtp.Credentials = new NetworkCredential(_mailFrom, _mailFromPassword);

        await smtp.SendMailAsync(mail); // Not sending mail :(
    }

2 个答案:

答案 0 :(得分:1)

实际上在你了解Async / Await之前(这是一个很棒的话题!),我会质疑你想要实现的目标,完全停止。

为什么要测试电子邮件设施本身,你应该给电子邮件客户端一些信任的元素,但是因为邮件不能保证你只能希望邮件到达目的地。实际确认将涉及收件人。

电子邮件客户端似乎是单例,但可能作为协作者传递给另一个编排类,您可以使用模拟并验证调用发送邮件方法,信任邮件客户端执行它应该执行的操作。我非常肯定邮件设施是其他一些过程的一部分....

此外,我对此外部类型命令使用集成类型测试,以验证当所有内容都正确检测到实际发送的电子邮件时。但我想可以说你已经是一个整合测试,也许这就是你的意图。

答案 1 :(得分:0)