Kamu tidak. Dan teladan Anda sendiri adalah contoh yang sempurna untuk menunjukkan mengapa tidak.
Anda ingin mengirim email, bukan? Jadi, Anda membuat suatu tempat kelas statis CommunicationUtilities
dengan statis SendEmail()
di dalamnya. Anda menggunakan metode ini dari beberapa kelas yang melakukan banyak hal, misalnya mengatur ulang kata sandi pengguna dan mengirimkannya yang baru melalui email. Sempurna.
Sekarang, apa yang terjadi jika Anda ingin menguji unit Anda di kelas? Anda tidak bisa, karena setiap kali Anda ingin menguji metode yang mengatur ulang kata sandi, itu mengubah database (yang tidak cocok untuk uji unit), dan bahkan mengirim email (yang bahkan lebih buruk).
Anda mungkin telah membaca tentang Inversion of Control, yang memiliki manfaat membuat pengujian unit lebih mudah. Artikel tentang IoC akan menjelaskan kepada Anda bahwa alih-alih melakukan sesuatu seperti:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
Anda melakukannya:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
yang memungkinkan untuk menggunakan tiruan dan bertopik.
Cobalah untuk menerapkan IOC ke Anda CommunicationUtilities
. Benar, kamu tidak bisa. Itu sebabnya rusak.