तुम नहीं। और आपका अपना उदाहरण यह दिखाने के लिए एक आदर्श है कि क्यों नहीं।
आप ईमेल भेजना चाहते हैं, है ना? इसलिए आप CommunicationUtilities
इसमें एक स्टैटिक के साथ कहीं एक स्टैटिक क्लास बनाते हैं SendEmail()
। आप इस विधि का उपयोग कुछ वर्ग से करते हैं जो सामान का एक गुच्छा करता है, उदाहरण के लिए उपयोगकर्ता का पासवर्ड रीसेट करता है और उसे ईमेल द्वारा एक नया भेजता है। उत्तम।
अब, यदि आप अपनी कक्षा को इकाई-परीक्षण करना चाहते हैं तो क्या होगा? आप नहीं कर सकते, क्योंकि हर बार जब आप पासवर्ड को रीसेट करने वाली विधि का परीक्षण करना चाहते हैं, तो यह डेटाबेस को बदल देता है (जो इकाई परीक्षण के लिए उपयुक्त नहीं है), और इसके अलावा एक ईमेल भेजता है (जो और भी बुरा है)।
आपने उलटा नियंत्रण के बारे में पढ़ा होगा, जिसमें यूनिट परीक्षण को आसान बनाने का एक लाभ है। आईओसी के बारे में लेख आपको समझाएंगे कि कुछ करने के बजाय:
void ResetPassword(UserIdentifier userId)
{
...
new MailSender().SendPasswordReset(userMail, newPassword);
}
तुम करो:
void ResetPassword(IMailSender sender, UserIdentifier userId)
{
...
sender.SendPasswordReset(userMail, newPassword);
}
जो मोज़ेक और स्टब्स का उपयोग करने की अनुमति देता है।
अपने लिए IoC लगाने का प्रयास करें CommunicationUtilities
। ठीक है, तुम नहीं कर सकते। इसलिए टूट गया है।