यूनिट परीक्षण करते समय, आपको कंटेनर का बिल्कुल उपयोग नहीं करना चाहिए। बस अपने कन्स्ट्रक्टर को कॉल करके और उचित नकली वस्तुओं के साथ आपूर्ति करके परीक्षण के तहत कक्षा बनाएं।
एक पैटर्न जिसने मुझे अतीत में बहुत मदद की है, एक साधारण परीक्षण वर्ग-विशिष्ट फैक्ट्री विधि का उपयोग है। यह विधि परीक्षण के तहत कक्षा के निर्माण को केंद्रीकृत करती है और परीक्षण परिवर्तन के तहत कक्षा की निर्भरता के दौरान किए जाने वाले परिवर्तनों की मात्रा को कम करता है।
private ClassUnderTest CreateValidClassUnderTest(params object[] dependencies)
{
return new ClassUnderTest(
dependencies.OfType<ILogger>().SingleOrDefault() ?? new FakeLogger(),
dependencies.OfType<IMailSender>().SingleOrDefault() ?? new FakeMailer(),
dependencies.OfType<IEventPublisher>().SingleOrDefault() ?? new FakePublisher());
}
एकीकरण परीक्षण के लिए यह कंटेनर का उपयोग कर, और कंटेनर के कुछ ही निर्भरता स्वैप और अधिक आम है: इस तरह इस तरह के कारखाने विधि कैसा नज़र आ सकता है। फिर भी, वे एकीकरण परीक्षण आपके अनुप्रयोग_स्टार्ट में बनाए गए कंटेनर का उपयोग नहीं करेंगे, लेकिन प्रत्येक एकीकरण परीक्षण में उस मामले में सबसे अधिक संभावना है कि इसका अपना नया कंटेनर उदाहरण हो, क्योंकि प्रत्येक परीक्षण अलगाव में चलाना चाहिए। और यहां तक कि यदि आपने application_start से एक कंटेनर का उपयोग किया है, तो भी आपका एकीकरण परीक्षण एक अलग प्रोजेक्ट से चलाया जाता है और आपके चल रहे एप्लिकेशन में हस्तक्षेप नहीं करेगा।
हालांकि प्रत्येक एकीकरण परीक्षण को अपना कंटेनर इंस्टेंस (यदि कोई हो) प्राप्त करना चाहिए, तब भी आप जितना संभव हो सके कंटेनर कॉन्फ़िगरेशन कोड का पुन: उपयोग करना चाहते हैं। यह इस कोड को एक विधि में निकालने के द्वारा किया जा सकता है जो या तो कॉल किए जाने पर एक नया कॉन्फ़िगर किया गया कंटेनर उदाहरण देता है, या एक सप्लाई किए गए कंटेनर इंस्टेंस को कॉन्फ़िगर करता है (और कुछ भी वापस नहीं करता है)। इस विधि को आम तौर पर अपूर्ण कॉन्फ़िगरेशन और कॉलर (या तो आपके परीक्षण या वैश्विक असैक्स) को अनुपलब्ध कॉन्फ़िगरेशन जोड़ना चाहिए।
इस कोड को निकालने: आपको एक से अधिक अंत एप्लिकेशन की अनुमति मिलती है जो आंशिक रूप से समान कॉन्फ़िगरेशन साझा करती है; आपको एकीकरण परीक्षण में कंटेनर को सत्यापित करने की अनुमति देता है; और आपको उन सेवाओं को जोड़ने की अनुमति देता है जिन्हें आपके एकीकरण परीक्षणों से मजाक करने की आवश्यकता होती है।
जीवन को आसान बनाने के लिए, सरल इंजेक्टर आपको मौजूदा पंजीकरण को नए (उदाहरण के लिए एक मजाकिया) से प्रतिस्थापित करने की अनुमति देता है। आप इसे निम्नानुसार सक्षम कर सकते हैं:
container.Options.AllowOverridingRegistrstions = true;
लेकिन इससे सावधान रहें! यह विकल्प इस तथ्य को छुपा सकता है कि आपने गलती से पंजीकरण को ओवरराइड किया है। मेरे अनुभव में यह ज्यादातर मामलों में एक अधूरा कंटेनर बनाने के लिए बेहतर होता है और बाद में ओवरराइड करने के बजाय गायब पंजीकरण को जोड़ता है। या यदि आप ओवरराइड करने का निर्णय लेते हैं, तो किसी भी आकस्मिक गलत कॉन्फ़िगरेशन को रोकने के लिए अंतिम संभव पल में सुविधा सक्षम करें।
क्या आप स्वचालित परीक्षण स्थापित करने के बारे में बात कर रहे हैं?यदि ऐसा है, तो प्रत्येक टेस्ट केस से पहले कंटेनर (जहां आवश्यक हो वहां मिक्स का उपयोग करें) का पुनर्निर्माण करें। यह एमएसटीएस्ट में '[testInitialize]' और NUnit में '[SetUp]' है। –