C# AE.Net.Mail单元测试-验证收件箱中是否存在电子邮件
我已经开始使用AE.Net.Mail试图登录到我们的一个测试 帐户并根据唯一主题和电子邮件正文验证收件箱中是否存在(未查看的)电子邮件。 我已经在VSE 2013中创建了一个单元测试项目,并试图获得“通过”或“失败” 通过使用断言。我可以打印出结果,但断言总是通过,这是没有意义的。 有什么想法吗C# AE.Net.Mail单元测试-验证收件箱中是否存在电子邮件,c#,unit-testing,gmail-imap,C#,Unit Testing,Gmail Imap,我已经开始使用AE.Net.Mail试图登录到我们的一个测试 帐户并根据唯一主题和电子邮件正文验证收件箱中是否存在(未查看的)电子邮件。 我已经在VSE 2013中创建了一个单元测试项目,并试图获得“通过”或“失败” 通过使用断言。我可以打印出结果,但断言总是通过,这是没有意义的。 有什么想法吗 namespace GmailAccessUnitTest { [TestClass] public class UnitTest1 { [TestMethod]
namespace GmailAccessUnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
string imapAddr = "imap.gmail.com";
int portNo = 993;
bool secureConn = true;
string myEmailID = "a@sample.com";
string myPasswd = "pass";
using (ImapClient ic = new ImapClient(imapAddr, myEmailID, myPasswd, ImapClient.AuthMethods.Login, portNo, secureConn))
{
ic.SelectMailbox("INBOX");
bool headersOnly = false;
Lazy<MailMessage>[] messages = ic.SearchMessages(SearchCondition.Unseen(), headersOnly);
foreach (Lazy<MailMessage> message in messages)
{
MailMessage m = message.Value;
string sender = m.From.Address;
string subject = m.Subject;
string content = m.Body;
Assert.IsTrue(m.Subject.Equals("Demonstration Account - Purchase Order #590-22")
, "Order email was not found");
//Console.WriteLine("Email with subject {0} was sent by sender {1}, at {2},", m.Subject, sender, m.Date);
}
}
}
}
}
名称空间GmailaceSUnitTest
{
[测试类]
公共类UnitTest1
{
[测试方法]
公共void TestMethod1()
{
字符串imapAddr=“imap.gmail.com”;
int-portNo=993;
bool secureConn=true;
字符串myEmailID=”a@sample.com";
字符串myPasswd=“pass”;
使用(ImapClient ic=new ImapClient(imapAddr、myEmailID、myPasswd、ImapClient.AuthMethods.Login、portNo、secureConn))
{
ic.选择邮箱(“收件箱”);
bool headersOnly=假;
Lazy[]messages=ic.SearchMessages(SearchCondition.Unseen(),headersOnly);
foreach(消息中的惰性消息)
{
MailMessage m=message.Value;
字符串发送者=m.From.Address;
字符串主语=m.主语;
字符串内容=m.正文;
Assert.IsTrue(m.Subject.Equals(“演示账户-采购订单#590-22”)
,“未找到订单电子邮件”);
//Console.WriteLine(“主题为{0}的电子邮件由发件人{1}在{2}发送,”,m.主题,发件人,m.日期);
}
}
}
}
}
删除此邮件或添加另一封邮件(您在循环中执行断言,因此主题不等于“演示帐户-采购订单#590-22”的任何迭代都会失败)
或者,您可以检查消息是否显示,并跳过已显示的消息(如果需要,将消息设置为代码中显示的消息)。此库不会自动设置此标志
此外,您也没有在这里进行单元测试。这是集成测试。而此集成测试不是针对ImapClient,而是针对标准.NET Framework“惰性”集合。这是胡说八道-标准.NET Framework类可以被视为默认测试
要进行真正的单元测试,首先要确定要测试的功能,以及为什么要测试它。否则单元测试只会浪费大量无用的时间。已将代码更改如下,并按预期工作:
using (ImapClient ic = new ImapClient(imapAddr, myEmailID, myPasswd, ImapClient.AuthMethods.Login, portNo, secureConn))
{
ic.SelectMailbox("INBOX");
bool headersOnly = false;
Lazy<MailMessage>[] messages = ic.SearchMessages(SearchCondition.Unseen(), headersOnly);
foreach (Lazy<MailMessage> message in messages)
{
MailMessage m = message.Value;
string sender = m.From.Address;
string subject = m.Subject;
string content = m.Body;
if (subject.Equals("QA3 - Purchase Order #3503-197"))//Change string accordingly.
isEmailFound = true;
break;
}
}
Assert.IsTrue(isEmailFound, "Order email was not generated");
}
使用(ImapClient ic=new ImapClient(imapAddr、myEmailID、myPasswd、ImapClient.AuthMethods.Login、portNo、secureConn))
{
ic.选择邮箱(“收件箱”);
bool headersOnly=假;
Lazy[]messages=ic.SearchMessages(SearchCondition.Unseen(),headersOnly);
foreach(消息中的惰性消息)
{
MailMessage m=message.Value;
字符串发送者=m.From.Address;
字符串主语=m.主语;
字符串内容=m.正文;
if(subject.Equals(“QA3-采购订单#3503-197”)//相应地更改字符串。
isEmailFound=true;
打破
}
}
IsTrue(isEmailFound,“未生成订单电子邮件”);
}
Hi rufanov,这显然不是一个单元测试。我想使用VSE单元测试项目,因为运行一系列测试更方便,不管它们是合适的单元测试还是集成测试,就像这一个。我在这里试图实现的唯一一件事是,如果找不到特定的电子邮件,测试就会失败,如果找到了,测试就会通过。建议如果您能在代码中使用ons,我们将不胜感激。