Yapmazsın. Ve kendi örneğiniz neden olmadığını göstermek için mükemmel bir örnek.
E-posta göndermek istiyorsun, değil mi? Böylece, içinde statik CommunicationUtilities
olan bir yerde statik bir sınıf yaratırsınız SendEmail()
. Bu yöntemi, bir grup şey yapan bir sınıftan kullanırsınız, örneğin bir kullanıcının şifresini sıfırlar ve ona e-posta ile yeni bir tane gönderir. Mükemmel.
Şimdi, sınıfınızı birim olarak test etmek isterseniz ne olur? Şifreyi sıfırlayan yöntemi her test etmek istediğinizde, veritabanını değiştirir (bir birim testi için uygun değildir) ve ayrıca bir e-posta (daha da kötüsü) gönderir.
Birim testini kolaylaştırma avantajına sahip olan İnversiyon Kontrolünü okumuş olabilirsiniz. IoC ile ilgili makaleler size şöyle bir şey yapmak yerine şunları açıklayacaktır:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
Yapmalısın:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
alay ve taslakların kullanılmasına izin verir.
IoC'nizi uygulamanıza deneyin CommunicationUtilities
. Doğru, yapamazsın. Bu yüzden kırıldı.