Итак, у меня есть некоторый SMTP-материал в моем коде, и я пытаюсь использовать unit test этот метод.
Итак, я пытаюсь Mockup MailMessage, но он никогда не работает. Я думаю, что ни один из методов не является виртуальным или абстрактным, поэтому я не могу использовать moq для его макета: (.
Так что, я думаю, я должен сделать это вручную, и там, где я застрял.
* вручную я подразумеваю witting интерфейс и оболочку, но пусть moq все еще макет интерфейса.
Я не знаю, как написать свой интерфейс и мой Wrapper (класс, который будет реализовывать интерфейс, который будет иметь фактический код MailMessage, поэтому, когда мой настоящий код запускает его, он действительно делает то, что ему нужно делать).
Итак, сначала я не уверен, как настроить свой интерфейс. Давайте взглянем на одно из полей, которые у меня есть для макета.
MailMessage mail = new MailMessage();
mail.To.Add("[email protected]");
так что это первое, что мне нужно подделать.
так что я смотрю на это. Я знаю, что "To" является свойством, нажав F12 на "To", он возвращает меня к этой строке:
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;
}
Спасибо