J'ai donc quelques trucs SMTP dans mon code et j'essaie de tester cette méthode.Comment faire une maquette de System.Net.Mail MailMessage?
Alors j'ai essayé de Mockup MailMessage mais ça ne semble jamais fonctionner. Je pense qu'aucune des méthodes sont virtuelles ou abstraites je ne peux pas utiliser moq pour se moquer it up :(.
Je suppose que je dois le faire à la main et c'est là où je suis coincé.
* à la main, je veux dire l'esprit de l'interface et le wrapper mais en laissant moq encore mockup l'interface
Je ne sais pas comment écrire mon interface et mon Wrapper (une classe qui implémenter l'interface qui aura le code MailMessage réelle donc quand mon vrai code fonctionne, il fait les choses qu'il doit faire)
Donc d'abord je ne sais pas comment configurer mon interface. Je jette un coup d'oeil à l'un des champs que j'ai à maquiller.
MailMessage mail = new MailMessage();
mail.To.Add("[email protected]");
donc c'est la première chose que je dois faire semblant.
l'air si à ce que je sais que « A » est une propriété en appuyant sur F12 sur « A » il me faut à cette ligne:
public MailAddressCollection To { get; }
Il est MailAddressCollection la propriété. Mais certains comment je suis autorisé à aller plus loin et faire "Ajouter".
Alors maintenant, ma question est dans mon interface qu'est-ce que je fais?
puis-je faire une propriété? Cette propriété doit-elle être MailAddressCollection?
Ou devrais-je avoir une méthode comme?
void MailAddressCollection To(string email);
or
void string To.Add(string email);
Alors, à quoi ressemblerait mon emballage? Comme vous pouvez le voir, je suis très confus.
Comme il y en a tellement. Je devine que je viens de simuler ceux que j'utilise.
modifier le code
Je suppose que dans un vrai sens, je ne dois tester plus les exceptions, mais je veux tester pour vous assurer que si tout est envoyé alors il obtiendra la réponse = succès.
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;
}
Merci
Hmm Je crois que je comprends ce que tu dis mais que tu peux doubler. Dites-vous que MailMessage est tout le code qui a été écrit pour moi, je n'ai pas besoin de tester et puisque MailMessage n'a vraiment rien à voir avec mes tests, Mailmessage ne cause pas vraiment de dépendances, il est vraiment juste smpt. send() qui crée le droit de dépendance? Donc vraiment je dois juste simuler la partie d'envoi pour casser toutes les dépendances droit? Ma pensée était mais MailMessage était une dépendance mais maintenant que je le regarde je peux voir que ce n'est pas le cas. Est-ce correct et qu'est-ce que vous essayez de dire? – chobo2
OH et encore une chose que j'utilise des choses comme ConfigurationManager.AppSettings ["SMTP"]; Alors, est-ce que je devrais maquiller ConfigurationManager pour ne pas dépendre d'un fichier AppConfig ou devrais-je simplement créer un fichier appConfig? – chobo2
Droite. Vous ne voulez pas tester MailMessage ou SmtpClient; ce n'est pas ton code. Vous voulez tester unitairement tout ce qui utilise MailMessage et SmtpClient pour vous assurer que: a) ils créent un MailMessage avec les bons champs; et b) sont en train d'envoyer l'email. –