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

时间:2014-08-20 05:15:14

标签: c# unit-testing gmail-imap

我已经开始使用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);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

删除此邮件或添加其他消息(您在循环中执行断言,因此在主题不等于&#34;演示帐户 - 采购订单#590-22&#34;的任何迭代中都会失败。

或者您可以检查是否看到消息,并跳过已经看过的消息(并在需要时设置消息,如代码中所示)。该库不会自动设置此标志。

此外,您还没有在这里进行单元测试。它的集成测试。此集成测试不适用于ImapClient,但主要用于标准.NET Framework&#34; Lazy&lt; T&gt;&#34;采集。这是无意义的 - 默认情况下,可以认为标准.Net Framework类已经过测试。

为了进行真正的单元测试,首先要确定你想要测试的功能。为什么要测试它。否则单元测试只会浪费大量时间。

答案 1 :(得分:0)

更改了代码如下,并按预期工作:

    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");
    }