Non. Et votre propre exemple est parfait pour montrer pourquoi.
Vous voulez envoyer des e-mails, non? Vous créez donc quelque part une classe statique CommunicationUtilities
avec une statique SendEmail()
. Vous utilisez cette méthode d'une classe qui fait un tas de choses, par exemple réinitialise le mot de passe d'un utilisateur et lui envoie un nouveau par e-mail. Parfait.
Maintenant, que se passe-t-il si vous voulez faire un test unitaire de votre classe? Vous ne pouvez pas, car chaque fois que vous voulez tester la méthode qui réinitialise le mot de passe, cela change la base de données (qui ne convient pas pour un test unitaire), et envoie en outre un e-mail (ce qui est encore pire).
Vous avez peut-être lu sur Inversion of Control, qui a l'avantage de faciliter les tests unitaires. Des articles sur l'IoC vous expliqueront qu'au lieu de faire quelque chose comme:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
tu fais:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
ce qui permet d'utiliser des moquettes et des talons.
Essayez d'appliquer l'IoC à votre CommunicationUtilities
. Bon, tu ne peux pas. Voilà pourquoi il est cassé.