Non lo fai. E il tuo esempio è perfetto per mostrare perché no.
Vuoi inviare e-mail, giusto? Quindi crei da qualche parte una classe statica CommunicationUtilities
con una percentuale SendEmail()
in essa. Si utilizza questo metodo da una classe che fa un sacco di cose, ad esempio reimposta la password di un utente e gliene invia una nuova via e-mail. Perfetto.
Ora, cosa succede se vuoi testare la tua classe? Non puoi, perché ogni volta che vuoi testare il metodo che reimposta la password, cambia il database (che non è adatto per un test di unità) e inoltre invia un'email (che è anche peggio).
Potresti aver letto su Inversion of Control, che ha il vantaggio di semplificare il test dell'unità. Gli articoli su IoC ti spiegheranno che invece di fare qualcosa del tipo:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
fai:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
che consente di utilizzare mock e stub.
Prova ad applicare IoC al tuo CommunicationUtilities
. Giusto, non puoi. Ecco perché è rotto.