Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AE.Net.Mail单元测试-验证收件箱中是否存在电子邮件_C#_Unit Testing_Gmail Imap - Fatal编程技术网

C# AE.Net.Mail单元测试-验证收件箱中是否存在电子邮件

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]

我已经开始使用AE.Net.Mail试图登录到我们的一个测试 帐户并根据唯一主题和电子邮件正文验证收件箱中是否存在(未查看的)电子邮件。 我已经在VSE 2013中创建了一个单元测试项目,并试图获得“通过”或“失败” 通过使用断言。我可以打印出结果,但断言总是通过,这是没有意义的。 有什么想法吗

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,我们将不胜感激。