2016-06-01 23 views
0

我試圖理解爲什麼我不能夠發送郵件異步(也許這是關係我是從NUnit的運行呢?發送使用SendMailAsync電子郵件從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 :(
    } 
+0

開始閱讀... http://blog.stephencleary.com/2012/02/async-and-await.html – Mick

回答

0

正如前面解釋過多次......

How to call asynchronous method from synchronous method in C#?

Calling async method synchronously

http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

我想你會發現這個代碼導致死鎖。試試...

[TestFixture] 
public class Tester 
{ 

    [Test] 
    public async Task 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 :(
} 

因爲這裏所討論...

How do I test an async method with NUnit, eventually with another framework?

1

其實你瞭解異步/等待之前(這是一個很大的話題!),我懷疑它是什麼,你正在努力實現,完全停止。

爲什麼要測試電子郵件設施本身,你應該給電子郵件客戶端一些信任的因素,但是,由於郵件不能保證,你只能希望郵件到達目的地。實際確認將涉及收件人。

電子郵件客戶端似乎是一個單身人士,但可能會作爲協作者傳遞給另一個編排類,您可以使用模擬並驗證發送郵件方法是否被調用,並相信郵件客戶端執行了它應該做的事至。我相當肯定,郵寄設施是一些其他過程的一部分....

此外,我會使用這種外部類型命令的集成類型測試,以驗證什麼時候一切正確地探測到一個實際電子郵件被髮送。但我想這可能會被認爲你已經是一個集成測試,也許這就是你的意圖。

+0

所以一年後,看着這個問題,你只是敲一個測試,只是爲了看到它的工作原理,這實際上不屬於你的測試套件。那就是它。 – brumScouse

相關問題