我正在试图理解为什么我无法发送异步邮件(可能与我从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 :(得分:1)
实际上在你了解Async / Await之前(这是一个很棒的话题!),我会质疑你想要实现的目标,完全停止。
为什么要测试电子邮件设施本身,你应该给电子邮件客户端一些信任的元素,但是因为邮件不能保证你只能希望邮件到达目的地。实际确认将涉及收件人。
电子邮件客户端似乎是单例,但可能作为协作者传递给另一个编排类,您可以使用模拟并验证调用发送邮件方法,信任邮件客户端执行它应该执行的操作。我非常肯定邮件设施是其他一些过程的一部分....
此外,我对此外部类型命令使用集成类型测试,以验证当所有内容都正确检测到实际发送的电子邮件时。但我想可以说你已经是一个整合测试,也许这就是你的意图。
答案 1 :(得分: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
我想你会发现这段代码导致死锁。尝试...
{{1}}
正如这里所讨论的那样......
How do I test an async method with NUnit, eventually with another framework?