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

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

जुनीट 5 इस समस्या के लिए एक अधिक कुशल दृष्टिकोण प्रदान करता है: निर्भरता इंजेक्शन (डीआई)।

निर्भरता इंजेक्शन क्या है?

DI एक डिज़ाइन पैटर्न है जहाँ एक वस्तु किसी अन्य वस्तु की निर्भरता की आपूर्ति करती है। जब आप एक जावा एप्लिकेशन बना रहे होते हैं, तो आपके पास एक ऐसा वर्ग हो सकता है जो उस वस्तु पर निर्भर करता है जिसे अन्य वर्ग अपना कार्य करने के लिए बनाता है।

निर्भरता इंजेक्शन से पहले, किसी भिन्न वर्ग से किसी वस्तु का उपयोग करने के लिए आपको उस वस्तु का एक नया उदाहरण उस वर्ग के भीतर बनाना होगा जो उस पर निर्भर करता है। इसलिए, यदि आपके पास कई वर्ग हैं जो एक ही वस्तु पर निर्भर करते हैं, तो आपको आश्रित वर्गों के भीतर इसके कई उदाहरण बनाने होंगे।

instagram viewer

DI आपको उस वर्ग में इसका एक नया उदाहरण बनाए बिना किसी आश्रित वर्ग में किसी वस्तु का उपयोग करने की अनुमति देता है।

जूनिट 5 में निर्भरता इंजेक्शन

JUnit 5 आपको परीक्षण विधियों और निर्माणकर्ताओं दोनों में निर्भरता को इंजेक्ट करने की अनुमति देता है। यह महत्वपूर्ण है क्योंकि ढांचे के पिछले संस्करणों ने परीक्षण विधियों या कन्स्ट्रक्टरों को पैरामीटर रखने की अनुमति नहीं दी थी।

JUnit 5 आपको जितने चाहें उतने पैरामीटर इंजेक्ट करने की अनुमति देता है। एकमात्र पकड़ यह है कि ParameterResolver API रन टाइम पर प्रत्येक पैरामीटर को हल करने में सक्षम होना चाहिए। JUnit में वर्तमान में तीन अंतर्निहित पैरामीटर रिज़ॉल्वर हैं जो इसे स्वचालित रूप से उपयोग करता है। किसी अन्य रिज़ॉल्वर का उपयोग करने के लिए, आपको @ExtendWith एनोटेशन का उपयोग करके इसे स्पष्ट रूप से पंजीकृत करना होगा।

JUnit में निर्भरता इंजेक्शन

यह नमूना कार्यक्रम JUnit के अंतर्निर्मित पैरामीटर (TestInfoParameterResolver) में से एक का उपयोग करता है, यह प्रदर्शित करने के लिए कि आप एक निर्भरता को कैसे इंजेक्ट कर सकते हैं जूनिट 5 परीक्षण. TestInfoParameterResolver उन वस्तुओं को हल करता है जो TestInfo इंटरफ़ेस से संबंधित हैं। इसलिए, JUnit 5 इसका उपयोग करने वाली किसी भी विधि या निर्माता को TestInfo इंटरफ़ेस का एक उदाहरण प्रदान करेगा।

आयातस्थिर org.junit.jupiter.api। दावे।*;
आयात org.junit.jupiter.api। प्रदर्शित होने वाला नाम;
आयात org.junit.jupiter.api। परीक्षा;
आयात org.junit.jupiter.api। टेस्टइन्फो;

कक्षाइन्फोटेस्टइंटरफेसटेस्ट{
// InfoTestInterfaceTest कंस्ट्रक्टर में एक testInfo ऑब्जेक्ट इंजेक्ट करना
InfoTestInterfaceTest (TestInfo testInfo) {
AssertEquals ("InfoTestInterfaceTest", testInfo.getDisplayName ());
}

// एक testInfo ऑब्जेक्ट को विधियों में इंजेक्ट करना
@परीक्षा
खालीपनtestMethodName(टेस्टइन्फो टेस्टइन्फो){
AssertEquals ("testMethodName (TestInfo)", testInfo.getDisplayName ());
}

@परीक्षा
@प्रदर्शित होने वाला नाम("विधि का उपयोग कर @प्रदर्शित होने वाला नाम एनोटेशन")
खालीपनटेस्टमेथोडनामदो(टेस्टइन्फो टेस्टइन्फो){
assertEquals("विधि का उपयोग कर @प्रदर्शित होने वाला नाम एनोटेशन", testInfo.getDisplayName ());
}
}

उपरोक्त JUnit परीक्षण दर्शाता है कि किसी ऑब्जेक्ट को कन्स्ट्रक्टर और दो विधियों में कैसे इंजेक्ट किया जाए। जूनिट टेस्टइन्फो इंटरफ़ेस में चार विधियाँ हैं जिनका उपयोग आप इसके ऑब्जेक्ट के साथ कर सकते हैं।

GetDisplayName () विधि सबसे उपयोगी है। यह वर्तमान परीक्षण विधि या निर्माता का प्रदर्शन नाम लौटाता है। डिफ़ॉल्ट रूप से, यह नाम वर्ग पर आधारित होता है। लेकिन अगर आप इस्तेमाल करते हैं @DisplayName एनोटेशन, getDisplayName() विधि उस टेक्स्ट को बदले में वापस कर देगी।

उपरोक्त परीक्षण वर्ग निम्नलिखित परीक्षण रिपोर्ट उत्पन्न करता है:

@Before और @After विधियों में DI का उपयोग करें

निर्भरता का समर्थन करने वाले चार अन्य प्रकार के जुनीट एनोटेटेड तरीके हैं। ये @BeforeAll, @BeforeEach, @AfterAll, और @AfterEach एनोटेशन हैं। @Test विधि की तरह, आपको केवल एक पैरामीटर के रूप में पहले या बाद के तरीकों में से किसी एक को पास करने की आवश्यकता है, और आप जाने के लिए अच्छे हैं।

@Before और @After एनोटेशन महत्वपूर्ण हैं, क्योंकि वे आपको अधिक कुशल परीक्षण कोड विकसित करने में भी मदद करते हैं। इन विधियों में निर्भरताओं को इंजेक्ट करने की क्षमता होने से आपके परीक्षण कोड में और सुधार होगा।