首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何制作System.Net.Mail MailMessage的模型?

如何制作System.Net.Mail MailMessage的模型?
EN

Stack Overflow用户
提问于 2009-06-29 12:32:03
回答 2查看 9.5K关注 0票数 19

因此,我的代码中有一些SMTP内容,我正在尝试对该方法进行单元测试。

所以我一直在尝试模拟MailMessage,但它似乎从来都不起作用。我认为这些方法都不是虚拟的或抽象的,所以我不能使用moq来模拟它:(.

所以我想我不得不手工完成,这就是我被困住的地方。

*手动我的意思是知道界面和包装器,但让moq仍然模拟界面。

我不知道如何编写我的接口和包装器(一个实现具有实际MailMessage代码的接口的类,因此当我的实际代码运行时,它实际上做了它需要做的事情)。

所以首先我不确定如何设置我的界面。让我们看一看我必须模拟的一个字段。

代码语言:javascript
复制
MailMessage mail = new MailMessage();

mail.To.Add("test@hotmail.com");

所以这是我要伪造的第一件事。

看着它,我知道" to“是一个属性,只需在"To”上点击F12,就可以转到下面这一行:

代码语言:javascript
复制
public MailAddressCollection To { get; }

所以它是MailAddressCollection属性。而是如何允许我走得更远,并做“添加”。

所以现在我的问题是在我的界面中我做了什么?

我做了一个属性吗?此属性是否应为MailAddressCollection?

或者我应该有一个像这样的方法?

代码语言:javascript
复制
void MailAddressCollection To(string email);

or 

void string To.Add(string email);

那么我的包装器看起来会怎么样呢?

如你所见,我非常困惑。因为他们太多了。我猜我只是模拟了我正在使用的那些。

编辑代码

我猜在真正的意义上,我只需要测试更多的异常,但我想测试以确保如果一切都被发送了,那么它将得到response = success。

代码语言:javascript
复制
string response = null;
            try
            {

                MembershipUser userName = Membership.GetUser(user);

                string newPassword = userName.ResetPassword(securityAnswer);

                MailMessage mail = new MailMessage();

                mail.To.Add(userName.Email);

                mail.From = new MailAddress(ConfigurationManager.AppSettings["FROMEMAIL"]);
                mail.Subject = "Password Reset";

                string body = userName + " Your Password has been reset. Your new temporary password is: " + newPassword;

                mail.Body = body;
                mail.IsBodyHtml = false;


                SmtpClient smtp = new SmtpClient();

                smtp.Host = ConfigurationManager.AppSettings["SMTP"];
                smtp.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["FROMEMAIL"], ConfigurationManager.AppSettings["FROMPWD"]);

                smtp.EnableSsl = true;

                smtp.Port = Convert.ToInt32(ConfigurationManager.AppSettings["FROMPORT"]);

                smtp.Send(mail);

                response = "Success";
            }
            catch (ArgumentNullException ex)
            {
                response = ex.Message;

            }
            catch (ArgumentException ex)
            {
                response = ex.Message;

            }
            catch (ConfigurationErrorsException ex)
            {
                response = ex.Message;
            }
            catch (ObjectDisposedException ex)
            {
                response = ex.Message;
            }
            catch (InvalidOperationException ex)
            {
                response = ex.Message;
            }
            catch (SmtpFailedRecipientException ex)
            {
                response = ex.Message;
            }
            catch (SmtpException ex)
            {
                response = ex.Message;
            }



            return response;

        } 

谢谢

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1058041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档