2011-08-06 18 views
8

निर्भरता इंजेक्शन आप इकाई अपने कोड बहुत अच्छी तरह से परीक्षण में मदद करता है। लेकिन अगर हम सही समय पर सही निर्भरताओं को इंजेक्शन देते हैं तो हम कैसे परीक्षण करेंगे ?? उदाहरण के लिए मेरे पास एक सेवा कक्षा है जो सेवा सत्यापनकर्ताओं की एक सूची लेती है। चूंकि सत्यापनकर्ता के सूची एक डि कंटेनर से इंजेक्ट किया जाता है, हम कैसे है कि सही प्रमाणकों इंजेक्ट किया जाता यकीन कर सकता हूँ ?? क्या होगा अगर कुछ डेवलपर गलती से सूची से एक वैधकर्ता को हटा दें। भले ही हम डेवन डेंसी इंजेक्शन पर परीक्षण लिखते हैं, हम encapsulation तोड़ने के बिना सभी निर्भरताओं पर जोर नहीं दे सकते हैं। एकमात्र तरीका एक एकीकरण परीक्षण है जो सेवा के सत्यापन व्यवहार पर जोर देता है। यदि सेवा व्यवहार जटिल है, तो एकीकरण परीक्षण लिखना मुश्किल हो जाता है। कोई विचार ??आप निर्भरता इंजेक्शन का परीक्षण कैसे करते हैं?

+2

मुझे लगता है कि एकीकरण परीक्षण सही जवाब है, लेकिन आप सही हैं कुछ चीजों का परीक्षण करना मुश्किल हो सकता है। – Kevin

+2

कुछ निर्भरता इंजेक्शन ढांचे (यदि अधिकतर नहीं हैं) तो आप कंटेनर को सभी रजिस्ट्रेशन सत्यापित करने और परीक्षण करने की अनुमति देते हैं यदि प्रत्येक पंजीकरण बनाया जा सकता है। यदि आप कर सकते हैं, तो इस सत्यापन को एप्लिकेशन प्रारंभ पर ट्रिगर करें। यह एप्लिकेशन को तब शुरू करने से रोकता है जब सभी निर्भरताओं को नहीं बनाया जा सकता है और इस तरह आप एप्लिकेशन को चलाने (या डीबग) करते समय तत्काल DI कॉन्फ़िगरेशन त्रुटियों को ढूंढते हैं। – Steven

+0

@Steven क्या हाइबरनेट में ऐसा सत्यापन उपकरण है? – mauryat

उत्तर

6

अपने प्रश्न की व्याख्या करने के लिए:

मैं अपने आवेदन और वे सभी काम के व्यक्तिगत घटकों का परीक्षण किया है, लेकिन मैं कैसे एक पूरे काम करता है के रूप में आवेदन में पता है?

अच्छी खबर

विचार करें कि एक स्थिति में आप की स्थिति में किया जा रहा है पूछने के लिए की तुलना में कर रहे हैं, अच्छा:

मैं अब यह सब कोड लिखा है, मैं अगर कैसे जानते हो आवेदन काम करता है?

आप मिल गया है और इकाई परीक्षण में कीड़े हटा दिया। एक निर्भरता इंजेक्शन शैली में कोडिंग ने निर्भरता को स्पष्ट किया और वैश्विक चर पर निर्भरता को हटा दिया। अपने आप में इन तकनीकों में मतलब है तुम कम कीड़े, और विशेष रूप से कम कीड़े है कि केवल खुद को दिखाने जब पूरा आवेदन एक साथ रखा जाता है के लिए होगा।

टेस्ट बड़ा

अब, अपने सवाल का जवाब देने पर स्थानांतरित करने के लिए, तो आपको यह स्पष्ट करने के लिए है कि एक विशेष सत्यापनकर्ता अपने निर्भरता इंजेक्शन कंटेनर द्वारा दिया जाता है एक स्वचालित परीक्षण लिख सकते हैं। अभी तक बेहतर, मैं परीक्षण है कि writting पक्ष: -

  • एक वस्तु के लिए डि कंटेनर पूछें (जो पीछे सहयोग वस्तुओं की एक ग्राफ है प्रमाणकों की एक सूची जैसे)
  • वस्तु पूछो यह समारोह है प्रदर्शन करने के लिए (मान्य इस डेटा)
  • परिणाम जोर (जैसे प्रमाणीकरण त्रुटि)

आपको लगता है कि एक परीक्षण डबल के साथ डेटाबेस, वर्तमान सर्वर समय, एक वेब सेवा, आदि का उपयोग कुछ वस्तुओं को बदलने के लिए चाहते हो सकता है। यह आसान है क्योंकि आप निर्भरता इंजेक्शन का उपयोग कर रहे हैं।

जब तक कि एक वर्ग विशेष रूप से परेशानी है, मैं इस स्तर पर परीक्षण करने के लिए perfer क्योंकि यह अधिक परीक्षण रिफैक्टरिंग जीवित रहने के लिए अनुमति देता है। 1 की चक्रीय जटिलता वाली कक्षाओं को बड़े परीक्षण के हिस्से के रूप में उपयोग किए जाने पर स्टैंड-अलोन परीक्षण की आवश्यकता नहीं होती है। उच्च चक्रीय जटिलता वाले वर्ग हो सकते हैं।

परीक्षणों के बहुत सारे है, लेकिन यह काम करता है?

फिर भी, आप सोच रहे होंगे, लेकिन क्या पूरी चीज काम करती है?

अंततः इस प्रश्न का उत्तर देने के लिए, आपको एप्लिकेशन के अंतिम रूप में परीक्षण करने की आवश्यकता है।एक वेब अनुप्रयोग के लिए, इसका मतलब उचित सर्वर पर एक उचित डेटाबेस और वास्तविक फ़ायरवॉल, आदि के साथ इसे तैनात करना है। फिर आप सेलेनियम जैसे कुछ परीक्षण या परीक्षण कर सकते हैं।

सही निर्भरताओं को इंजेक्ट करने में विफलता के परिणामस्वरूप इंजेक्शन घटक को जो कुछ भी करना है, उसमें एक विनाशकारी त्रुटि होगी। प्रत्येक संयोजन का परीक्षण करना आवश्यक नहीं है, लेकिन प्रत्येक घटक को हल्के से स्पर्श करें।

संबंधित मुद्दे