Итак, в моем коде есть некоторые SMTP-компоненты, и я пытаюсь выполнить модульное тестирование этого метода.
Итак, я пытался создать макет MailMessage, но, похоже, он никогда не работал. Я думаю, что ни один из методов не является виртуальным или абстрактным, поэтому я не могу использовать moq для его макетирования: (.
Так что я думаю, что я должен сделать это вручную, и вот где я застрял.
* под рукой я имею в виду остроумие интерфейса и оболочки, но позволяющее moq все еще макетировать интерфейс.
Я не знаю, как написать мой Интерфейс и мой Wrapper (класс, который будет реализовывать интерфейс, который будет иметь реальный код MailMessage, поэтому, когда мой реальный код выполняется, он фактически выполняет то, что ему нужно).
Итак, сначала я не уверен, как настроить мой интерфейс. Давайте посмотрим на одно из полей, которые я должен макетировать.
MailMessage mail = new MailMessage();
mail.To.Add("test@hotmail.com");
так что это первое, что я должен подделать.
поэтому, глядя на это, я знаю, что «Кому» - это свойство, нажатие клавиши F12 над «Кому» приводит меня к этой строке:
public MailAddressCollection To { get; }
Так что это свойство MailAddressCollection. Но кое-как мне позволено пойти дальше и сделать «Добавить».
Так что теперь мой вопрос в моем интерфейсе, что я делаю?
мне сделать собственность? Должно ли это свойство быть MailAddressCollection?
Или у меня должен быть такой метод?
void MailAddressCollection To(string email);
or
void string To.Add(string email);
Тогда как бы выглядела моя обертка?
Итак, как вы можете видеть, я очень смущен. Поскольку их так много. Я предполагаю, что я просто макет тех, которые я использую.
изменить код
Полагаю, в истинном смысле, мне нужно было бы только проверить больше исключений, но я хочу проверить, чтобы убедиться, что все отправлено, тогда оно получит ответ = успех.
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;
}
Спасибо