Quindi ho alcune cose SMTP nel mio codice e sto provando a testare il metodo.Come si crea un mockup di System.Net.Mail MailMessage?
Così ho provato a Mockup MailMessage ma sembra non funzionare mai. Credo che nessuno dei metodi sono virtuali o astratta, quindi non posso usare moq per deridere l'alto :(.
Quindi penso che devo farlo a mano ed è lì che mi sono bloccato.
* a mano intendo witting l'interfaccia e il wrapper ma lasciando moq ancora mockup l'interfaccia
Non so come scrivere la mia interfaccia e il mio wrapper (una classe che implementerà l'interfaccia che avrà il codice MailMessage effettivo così, quando il mio codice reale viene eseguito, fa esattamente ciò che deve fare)
Quindi prima non sono sicuro di come configurare la mia interfaccia. dai un'occhiata a uno dei campi che devo simulare.
MailMessage mail = new MailMessage();
mail.To.Add("[email protected]");
quindi questa è la prima cosa che devo fingere.
così guardarla so che "A" è una struttura colpendo F12 su "A" mi porta a questa linea:
public MailAddressCollection To { get; }
quindi è MailAddressCollection Proprietà. Ma alcuni come sono permesso di andare oltre e fare "Aggiungi".
Quindi ora la mia domanda è nella mia interfaccia che cosa faccio?
faccio una proprietà? Questa proprietà dovrebbe essere MailAddressCollection?
O dovrei avere un metodo come?
void MailAddressCollection To(string email);
or
void string To.Add(string email);
Allora come sarebbe il mio involucro?
Quindi come potete vedere sono molto confuso. Poiché ce ne sono così tanti. Sto indovinando che sto solo simulando quelli che sto usando.
modificare il codice
Credo che in in un vero senso avrei solo per testare più le eccezioni ma voglio provare a fare in modo che tutto viene inviato allora otterrà alla risposta = successo.
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;
}
Grazie
Hmm Penso di capire quello che dici ma fa doppio controllo. Stai dicendo che poiché MailMessage è tutto il codice che è stato scritto per me, non devo testare e poiché MailMessage non ha davvero nulla a che fare con i miei test anche che Mailmessage non causa realmente alcuna dipendenza. send() che crea la dipendenza giusta? Quindi, in realtà, devo solo falsificare la parte di invio per interrompere qualsiasi dipendenza, giusto? Il mio pensiero era, ma MailMessage era una dipendenza, ma ora che la guardo, posso vedere che non lo è. E 'corretto e cosa stai cercando di dire? – chobo2
OH e un'altra cosa uso cose come ConfigurationManager.AppSettings ["SMTP"]; Quindi dovrei simulare ConfigurationManager per interrompere la dipendenza da un file AppConfig o dovrei semplicemente creare un file appConfig? – chobo2
Giusto. Non si desidera testare MailMessage o SmtpClient; non è il tuo codice. Si desidera testare tutto ciò che USES MailMessage e SmtpClient si assicurano che: a) stiano creando un MailMessage con i campi corretti; e b) stanno effettivamente inviando l'e-mail. –