因此,我的代码中有一些SMTP内容,我正在尝试对该方法进行单元测试。
所以我一直在尝试模拟MailMessage,但它似乎从来都不起作用。我认为这些方法都不是虚拟的或抽象的,所以我不能使用moq来模拟它:(.
所以我想我不得不手工完成,这就是我被困住的地方。
*手动我的意思是知道界面和包装器,但让moq仍然模拟界面。
我不知道如何编写我的接口和包装器(一个实现具有实际MailMessage代码的接口的类,因此当我的实际代码运行时,它实际上做了它需要做的事情)。
所以首先我不确定如何设置我的界面。让我们看一看我必须模拟的一个字段。
MailMessage mail = new MailMessage();
mail.To.Add("test@hotmail.com");
所以这是我要伪造的第一件事。
看着它,我知道" to“是一个属性,只需在"To”上点击F12,就可以转到下面这一行:
public MailAddressCollection To { get; }
所以它是MailAddressCollection属性。而是如何允许我走得更远,并做“添加”。
所以现在我的问题是在我的界面中我做了什么?
我做了一个属性吗?此属性是否应为MailAddressCollection?
或者我应该有一个像这样的方法?
void MailAddressCollection To(string email);
or
void string To.Add(string email);
那么我的包装器看起来会怎么样呢?
如你所见,我非常困惑。因为他们太多了。我猜我只是模拟了我正在使用的那些。
编辑代码
我猜在真正的意义上,我只需要测试更多的异常,但我想测试以确保如果一切都被发送了,那么它将得到response = success。
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;
}
谢谢
https://stackoverflow.com/questions/1058041
复制相似问题