परीक्षण के लिए JUnit का उपयोग क्यों करें?


131

शायद मेरा सवाल एक नौसिखिया है, लेकिन मैं वास्तव में उन परिस्थितियों को नहीं समझ सकता, जिनके तहत मैं उपयोग करूंगा ?

चाहे मैं सरल अनुप्रयोग लिखूं या बड़े मैं उन्हें System.outबयानों के साथ परीक्षण करता हूं और यह मेरे लिए बहुत आसान है।

परियोजना में JUnit, अनावश्यक फ़ोल्डरों के साथ टेस्ट-क्लास क्यों बनाएं यदि हमें अभी भी उसी तरीकों को कॉल करना है, तो जांचें कि वे क्या वापस आते हैं और हमारे पास सब कुछ एनोटेट करने का ओवरहेड है?

क्‍यों क्‍यों न एक कक्षा लिखी जाए और एक साथ उसका परीक्षण किया जाए System.outलेकिन टेस्ट-कक्षाएं नहीं बनाई जाएं?

पुनश्च। मैंने कभी भी सीखी गई बड़ी परियोजनाओं पर काम नहीं किया।

तो उद्देश्य क्या है?



7
आप जानते हैं कि हर बार जब आप अपने कार्यक्रम में कुछ भी बदलते हैं, तो आउटपुट को मैन्युअल रूप से जांचने के आपके पिछले सभी काम अमान्य हो जाते हैं और आपको उन्हें फिर से शुरू करना होगा?
थोरबजोरन रावन एंडरसन

न केवल "परीक्षण", बल्कि "चतुर परीक्षण" भी बहुत महत्वपूर्ण है। यहाँ इसका एक अच्छा उदाहरण है: wp.me/prMeE-11
akcasoy

जवाबों:


139

यह परीक्षण नहीं है, यह "आउटपुट पर मैन्युअल रूप से देख रहा है" (जिसे LMAO के रूप में जाना जाता है)। औपचारिक रूप से इसे "असामान्य आउटपुट के लिए मैन्युअल रूप से देखना" (LMFAO) के रूप में जाना जाता है। (नीचे दिए गए नोट देखें)

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

अब जब भी आप कोई कोड परिवर्तन करते हैं तो 50k, 250k, 1m LOC या उससे अधिक और LMFAO तक का स्केल। न केवल यह अप्रिय है, यह असंभव है: आपने इनपुट, आउटपुट, झंडे, शर्तों के संयोजन को बढ़ाया है, और सभी संभव शाखाओं का उपयोग करना मुश्किल है।

इससे भी बदतर, LMFAO का मतलब हो सकता है कि वे वेब ऐप के पन्नों पर जाकर रिपोर्ट करें, रिपोर्ट्स चलाएं, दर्जनों फाइलों और मशीनों पर लाखों लॉग लाइनों को जमा करें, उत्पन्न और वितरित ईमेलों को पढ़ना, टेक्स्ट संदेशों की जांच करना, रोबोट के रास्ते की जांच करना, एक बोतल भरना सोडा, एक सौ वेब सेवाओं से डेटा एकत्र करना, एक वित्तीय लेनदेन के ऑडिट ट्रेल की जांच करना ... आपको यह विचार मिलता है। "आउटपुट" का मतलब पाठ की कुछ पंक्तियों से नहीं है, "आउटपुट" का अर्थ है समुच्चय प्रणाली व्यवहार।

अन्त में, इकाई और व्यवहार परीक्षण प्रणाली व्यवहार को परिभाषित करते हैं। टेस्ट एक निरंतर एकीकरण सर्वर द्वारा चलाया जा सकता है और शुद्धता के लिए जाँच की जा सकती है। निश्चित रूप से, ऐसा हो सकता है System.out, लेकिन CI सर्वर को यह पता नहीं चल रहा है कि उनमें से एक गलत है या नहीं और अगर ऐसा होता है, तो वे इकाई परीक्षण करते हैं, और आप एक रूपरेखा का उपयोग भी कर सकते हैं।

कोई फर्क नहीं पड़ता कि हम सोचते हैं कि हम कितने अच्छे हैं, इंसान अच्छी यूनिट टेस्ट फ्रेमवर्क या सीआई सर्वर नहीं हैं।


नोट: LMAO है परीक्षण, लेकिन एक में बहुत सीमित अर्थ। यह संपूर्ण परियोजना के दौरान या किसी प्रक्रिया के भाग के रूप में किसी भी सार्थक तरीके से दोहराने योग्य नहीं है। यह एक REPL में वृद्धिशील रूप से विकसित करने के लिए समान है, लेकिन उन वृद्धिशील परीक्षणों को औपचारिक रूप से कभी नहीं।


3
-1 पहले वाक्य के लिए, जो पूरी तरह से और पूरी तरह से असत्य है।
माइकल बोर्गवर्ड

50

हम प्रोग्राम के व्यवहार की शुद्धता को सत्यापित करने के लिए परीक्षण लिखते हैं।

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

आप यह तर्क दे सकते हैं

दृश्य निरीक्षण काम करता है , मैं जांचता हूं कि कोड इन परिदृश्यों के लिए क्या करना है और एक बार जब मैं देख सकता हूं तो यह सही है कि हम जाने के लिए अच्छे हैं।

अब सबसे पहले, यह बहुत अच्छा है कि आप रुचि रखते हैं कि क्या कोड सही तरीके से काम करता है या नहीं। ये अच्छी बात है। आप वक्र से आगे हैं! अफसोस की बात है कि दृष्टिकोण के रूप में इसके साथ समस्याएं हैं।

दृश्य निरीक्षण के साथ पहली समस्या यह है कि आप अपने कोड की शुद्धता को फिर से जांचने में सक्षम नहीं होने से एक बुरी वेल्डिंग दुर्घटना से दूर हैं।

दूसरी समस्या यह है कि इस्तेमाल की गई आँखों की जोड़ी को आँखों के मालिक के मस्तिष्क के साथ कसकर जोड़ा जाता है। यदि कोड का लेखक भी दृश्य निरीक्षण प्रक्रिया में उपयोग की जाने वाली आंखों का मालिक है, तो सत्यता को सत्यापित करने की प्रक्रिया को दृश्य निरीक्षक के मस्तिष्क में आंतरिक कार्यक्रम के बारे में ज्ञान पर निर्भरता है।

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

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

इकाई परीक्षण के साथ हम कोड को इसके घटक भागों में विभाजित करते हैं। प्रत्येक घटक के लिए हम फिर अपना स्टाल लगाते हैं कि प्रोग्राम को कैसा व्यवहार करना चाहिए । प्रत्येक इकाई परीक्षण एक कहानी बताता है कि कार्यक्रम के उस भाग को एक विशिष्ट परिदृश्य में कैसे कार्य करना चाहिए। प्रत्येक इकाई परीक्षण एक अनुबंध में एक खंड की तरह है जो बताता है कि क्लाइंट कोड के दृष्टिकोण से क्या होना चाहिए।

इसका मतलब यह है कि आंखों की एक नई जोड़ी में प्रश्न पर कोड पर लाइव और सटीक प्रलेखन के दो किस्में हैं ।

पहले उनके पास कोड ही है, कार्यान्वयन, कोड कैसे किया गया था ; दूसरा उन्हें इस बात का ज्ञान है कि मूल कोडर ने औपचारिक कथनों के एक सेट में वर्णित किया है जो यह बताता है कि इस कोड को कैसे व्यवहार करना चाहिए।

इकाई परीक्षण कैप्चर करते हैं और मूल रूप से उस ज्ञान का वर्णन करते हैं जो मूल लेखक के पास तब था जब उन्होंने कक्षा को लागू किया था। वे इस बात का विवरण प्रदान करते हैं कि क्लाइंट द्वारा उपयोग किए जाने पर वह वर्ग कैसे व्यवहार करता है।

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

प्रत्येक बार जब वे कोड को छूते हैं और प्रत्येक बिल्ड के लिए परीक्षण चलाते हैं, तो उनकी समीक्षा करके परीक्षण गुणवत्ता सुनिश्चित करें। यदि कोई परीक्षण विफल रहता है, तो उसे तुरंत ठीक करें।

हम परीक्षण चलाने की प्रक्रिया को स्वचालित करते हैं ताकि वे हर बार जब हम परियोजना का निर्माण करते हैं तो वे चलें। हम कोड कवरेज रिपोर्टों की पीढ़ी को भी स्वचालित करते हैं जो यह विवरण देते हैं कि कोड का कितना प्रतिशत कवर किया गया है और परीक्षण द्वारा प्रयोग किया गया है। हम उच्च प्रतिशत के लिए प्रयास करते हैं। कुछ कंपनियाँ कोड परिवर्तन को स्रोत कोड नियंत्रण में जाँचने से रोकेंगी यदि उनके पास कोड में व्यवहार में किसी भी परिवर्तन का वर्णन करने के लिए पर्याप्त इकाई परीक्षण नहीं हैं। आमतौर पर आँखों की एक दूसरी जोड़ी परिवर्तनों के लेखक के साथ संयोजन में कोड परिवर्तनों की समीक्षा करेगी। समीक्षक परिवर्तनों के माध्यम से जाएगा यह सुनिश्चित करता है कि परिवर्तन समझने योग्य हैं और परीक्षणों द्वारा पर्याप्त रूप से कवर किए गए हैं। तो समीक्षा प्रक्रिया मैनुअल है, लेकिन जब परीक्षण (इकाई और एकीकरण परीक्षण और संभवतः उपयोगकर्ता स्वीकृति परीक्षण) इस मैनुअल समीक्षा प्रक्रिया को स्वचालित निर्माण प्रक्रिया का हिस्सा बन जाते हैं। हर बार जब कोई परिवर्तन चेक इन किया जाता है, तो इन्हें चलाया जाता है। A सर्वर इस कार्य को निर्माण प्रक्रिया के भाग के रूप में करता है।

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

अंत में, परीक्षण प्रदान करना आपको आक्रामक रूप से पुन: कारक कोड की अनुमति देता है क्योंकि आप बड़े कोड सुधारों को इस ज्ञान में सुरक्षित बना सकते हैं कि आपके परिवर्तन मौजूदा परीक्षणों को नहीं तोड़ते हैं।

टेस्ट ड्रिवेन डेवलपमेंट के लिए एक चेतावनी है और वह यह है कि आपको इसे टेस्ट करने योग्य बनाने के लिए एक आंख से कोड लिखना होगा। इसमें सहयोग करने वाली वस्तुओं को तुरंत करने के लिए डिपेंडेंसी इंजेक्शन जैसे इंटरफेस और कोडिंग का उपयोग करना शामिल है। केंट बेक के काम की जाँच करें जो TDD का बहुत अच्छा वर्णन करता है। इंटरफेस और अध्ययन के लिए कोडिंग देखें


13

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

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

एक इंसान के लिए इन सभी अलग-अलग इनपुटों का परीक्षण करने में कई सप्ताह लग सकते हैं जबकि मशीन के लिए कुछ मिनट लग सकते हैं।

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

यदि आप अपने कोड में कुछ तोड़ते हैं, तो आपको इसके बारे में अभी पता चलेगा , न कि आपके द्वारा तैनात किए जाने के बाद, जब QA परीक्षक बग को पकड़ता है, तब नहीं जब आपके क्लाइंट ने रद्द कर दिया हो। आपके पास तुरंत ही गड़बड़ को ठीक करने का एक बेहतर मौका होगा , क्योंकि यह स्पष्ट है कि प्रश्न में कोड के हिस्से को तोड़ने वाली बात आपके अंतिम संकलन के बाद से सबसे अधिक होने की संभावना है। इस प्रकार, समस्या को ठीक करने के लिए आवश्यक जांच कार्य की मात्रा बहुत कम हो जाती है।


9

मैंने कुछ और System.out नहीं जोड़े:

  • प्रत्येक परीक्षण मामलों को स्वतंत्र बनाएं (यह महत्वपूर्ण है)

    JUnit यह कर सकता है: हर बार नए परीक्षण मामले का उदाहरण बनाया जाएगा और @Beforeकहा जाता है।

  • स्रोत से अलग परीक्षण कोड

    JUnit कर सकते हैं।

  • CI के साथ एकीकरण

    JUnit यह चींटी और मावेन के साथ कर सकता है।

  • परीक्षण मामलों को आसानी से व्यवस्थित और संयोजित करें

    JUnit @Ignoreसुइट का परीक्षण और परीक्षण कर सकता है ।

  • परिणाम की जाँच करना आसान है

    JUnit कई मुखर तरीके प्रदान करता है ( assertEquals, assertSame...)

  • मॉक और स्टब आपको परीक्षण मॉड्यूल पर ध्यान केंद्रित करते हैं।

    JUnit कर सकते हैं: मॉक और स्टब का उपयोग करके आप सेटअप को सही स्थिरता देते हैं, और परीक्षण मॉड्यूल तर्क पर ध्यान केंद्रित करते हैं।


9

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

आपका मैनुअल तरीका System.outअच्छा है लेकिन सबसे अच्छा नहीं है। यह एक बार परीक्षण है जो आप करते हैं। वास्तविक दुनिया में, आवश्यकताएं बदलती रहती हैं और अधिकांश समय आप मौजूदा कार्यों और कक्षाओं के लिए बहुत कुछ करते हैं। तो ... हर बार जब आप पहले से ही लिखित कोड का परीक्षण नहीं करते हैं।

वहाँ भी कुछ अधिक उन्नत सुविधाओं की तरह JUnit में हैं

बयान दर्ज करें

JUnit कुछ शर्तों के लिए परीक्षण करने के लिए तरीके प्रदान करता है, ये विधियाँ आम तौर पर दावे के साथ शुरू होती हैं और आपको त्रुटि संदेश, अपेक्षित और वास्तविक परिणाम को निर्दिष्ट करने की अनुमति देती हैं।

इनमें से कुछ तरीके हैं

  1. fail([message])- परीक्षा में फेल हो जाते हैं। यह जांचने के लिए उपयोग किया जा सकता है कि कोड का एक निश्चित हिस्सा नहीं पहुंचा है। या परीक्षण कोड लागू होने से पहले परीक्षण में असफल होना।
  2. assertTrue(true)/ assertTrue(false)- हमेशा सही / गलत होगा। परीक्षण के परिणाम को पूर्वनिर्धारित करने के लिए इस्तेमाल किया जा सकता है, यदि परीक्षण अभी तक लागू नहीं हुआ है।
  3. assertTrue([message,] condition)- जाँच करता है कि बूलियन conditionसच है।
  4. assertEquals([message,] expected, actual)- परीक्षण कि क्या दो मान समान हैं ( equalsयदि लागू हो तो विधि के अनुसार , अन्यथा ==संदर्भ तुलना का उपयोग करके )। नोट: सरणियों के लिए, यह वह संदर्भ है जिसे चेक किया गया है, कि सामग्री, इसके लिए उपयोग करें assertArrayEquals([message,] expected, actual)
  5. assertEquals([message,] expected, actual, delta)- टेस्ट, चाहे दो फ्लोट या डबल मान एक दूसरे से एक निश्चित दूरी में हों, deltaमूल्य द्वारा नियंत्रित ।
  6. assertNull([message,] object) - जाँचता है कि वस्तु अशक्त है

और इसी तरह। सभी उदाहरणों के लिए पूर्ण जावदोक यहाँ देखें

सूट

टेस्ट सूट के साथ, आप एक ही इकाई में कई परीक्षण कक्षाओं को जोड़ सकते हैं ताकि आप उन सभी को एक साथ निष्पादित कर सकें। एक सरल उदाहरण, परीक्षण वर्गों MyClassTestऔर MySecondClassTestएक सूट में संयोजन AllTests:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ MyClassTest.class, MySecondClassTest.class })
public class AllTests { } 

6

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


4

JUnit जावा प्रोग्रामिंग लैंग्वेज के लिए एक यूनिट टेस्टिंग फ्रेमवर्क है। यह परीक्षण संचालित विकास में महत्वपूर्ण है, और यूनिट टेस्टिंग फ्रेमवर्क के एक परिवार को सामूहिक रूप से xUnit के रूप में जाना जाता है।

JUnit "पहले परीक्षण फिर कोडिंग" के विचार को बढ़ावा देता है, जो कोड के एक टुकड़े के लिए परीक्षण डेटा सेट करने पर जोर देता है जिसे पहले परीक्षण किया जा सकता है और फिर लागू किया जा सकता है। यह दृष्टिकोण "परीक्षण थोड़ा, कोड थोड़ा, परीक्षण थोड़ा, कोड थोड़ा ..." जैसा है जो प्रोग्रामर उत्पादकता और प्रोग्राम कोड की स्थिरता को बढ़ाता है जो प्रोग्रामर तनाव और डिबगिंग पर खर्च किए गए समय को कम करता है।

सुविधाएँ JUnit एक खुला स्रोत ढांचा है जो लेखन और परीक्षण चलाने के लिए उपयोग किया जाता है।

परीक्षण विधियों की पहचान करने के लिए एनोटेशन प्रदान करता है।

अपेक्षित परिणामों के परीक्षण के लिए दावे प्रदान करता है।

परीक्षण चलाने के लिए टेस्ट धावक प्रदान करता है।

JUnit परीक्षण आपको तेज़ी से कोड लिखने की अनुमति देते हैं जो गुणवत्ता में वृद्धि करते हैं

JUnit सुरुचिपूर्ण ढंग से सरल है। यह कम जटिल है और कम समय लेता है।

JUnit परीक्षण स्वचालित रूप से चलाए जा सकते हैं और वे अपने स्वयं के परिणामों की जांच करते हैं और तत्काल प्रतिक्रिया प्रदान करते हैं। परीक्षण के परिणामों की रिपोर्ट के माध्यम से मैन्युअल रूप से कंघी करने की कोई आवश्यकता नहीं है।

JUnit परीक्षण परीक्षण मामलों और अन्य परीक्षण सूट वाले टेस्ट सूट में आयोजित किए जा सकते हैं।

जूनिट एक बार में परीक्षण प्रगति को दिखाता है जो हरा है यदि परीक्षण ठीक चल रहा है और परीक्षण विफल होने पर यह लाल हो जाता है।


2

मेरे पास थोड़ा अलग दृष्टिकोण है कि जुनीत की आवश्यकता क्यों है।

आप वास्तव में सभी परीक्षण मामलों को स्वयं लिख सकते हैं लेकिन यह बोझिल है। यहां समस्याएं हैं:

  1. इसके बजाय System.outहम if(value1.equals(value2))0 या -1 जोड़ सकते हैं और त्रुटि संदेश दे सकते हैं। इस मामले में, हमें एक "मुख्य" परीक्षा वर्ग की आवश्यकता है जो इन सभी तरीकों को चलाता है और परिणामों की जांच करता है और यह सुनिश्चित करता है कि कौन से परीक्षण के मामले विफल रहे और जो पास हो गए।

  2. यदि आप कुछ और परीक्षण जोड़ना चाहते हैं, तो आपको उन्हें इस "मुख्य" परीक्षा वर्ग में भी जोड़ना होगा। मौजूदा कोड में परिवर्तन। यदि आप परीक्षण कक्षाओं से परीक्षण मामलों का पता लगाना चाहते हैं, तो आपको प्रतिबिंब का उपयोग करने की आवश्यकता है।

  3. आपके सभी परीक्षण और परीक्षण चलाने के लिए आपकी मुख्य कक्षा का पता ग्रहण द्वारा नहीं लगाया गया है और आपको इन परीक्षणों को चलाने के लिए कस्टम डिबग / रन कॉन्फ़िगरेशन लिखना होगा। आप अभी भी उन सुंदर हरे / लाल रंग के आउटपुट नहीं देखते हैं।

यहाँ जेयूनीत क्या कर रहा है:

  1. इसमें ऐसी assertXXX()विधियाँ हैं जो स्थितियों से सहायक त्रुटि संदेशों को मुद्रित करने और "मुख्य" वर्ग के लिए परिणाम संचार करने के लिए उपयोगी हैं।

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

  3. JUnit में ग्रहण एकीकरण और maven / gradle एकीकरण भी है, इसलिए परीक्षणों को चलाना आसान है और आपको कस्टम रन कॉन्फ़िगरेशन लिखना नहीं पड़ेगा।

मैं JUnit का विशेषज्ञ नहीं हूं, इसलिए मैंने अब तक जो समझा है, वह भविष्य में और बढ़ेगा।


मुझे लगता है कि आपने पहले भाग में लिखा था कि अगर यूनिट यूनिट के परीक्षण से बेहतर कुछ नहीं होता तो हम क्या करते। हो सकता है कि JUnit कुछ प्रोग्रामर्स के ऐसे प्रयासों का परिणाम है और उन्होंने इस स्वचालन को पूरा करने के लिए एक अलग परीक्षण रूपरेखा लिखने की आवश्यकता महसूस की, इस प्रकार JUnit का जन्म हुआ, हो सकता है।
सौरभ पाटिल

1

आप परीक्षण ढांचे का उपयोग किए बिना कोई भी परीक्षण का मामला नहीं लिख सकते हैं या फिर आपको अपने परीक्षण मामलों को न्याय देने के लिए अपने परीक्षण को लिखना होगा। यहाँ JUnit फ्रेमवर्क के बारे में कुछ जानकारी दी गई है इसके अलावा आप TestNG फ्रेमवर्क का उपयोग कर सकते हैं।

जुनित क्या है?

Junit का व्यापक रूप से जावा प्रोग्रामिंग लैंग्वेज के साथ टेस्टिंग फ्रेमवर्क का उपयोग किया जाता है। आप इकाई परीक्षण और UI परीक्षण दोनों के लिए इस स्वचालन ढांचे का उपयोग कर सकते हैं। यह हमें विभिन्न एनोटेशन के साथ हमारे कोड के निष्पादन के प्रवाह को परिभाषित करने में मदद करता है। जूनिट को "पहले परीक्षण और फिर कोडिंग" के विचार पर बनाया गया है जो हमें परीक्षण मामलों की उत्पादकता और कोड की स्थिरता को बढ़ाने में मदद करता है।

जूनिट परीक्षण की महत्वपूर्ण विशेषताएं -

  1. यह खुला स्रोत परीक्षण ढांचा है जो उपयोगकर्ताओं को प्रभावी ढंग से परीक्षण मामलों को लिखने और चलाने की अनुमति देता है।
  2. परीक्षण विधियों की पहचान करने के लिए विभिन्न प्रकार के एनोटेशन प्रदान करता है।
  3. परीक्षण मामले के निष्पादन के परिणामों को सत्यापित करने के लिए विभिन्न प्रकार के दावे प्रदान करता है।
  4. यह प्रभावी रूप से परीक्षण चलाने के लिए परीक्षण धावक भी देता है।
  5. यह बहुत सरल है और इसलिए समय बचाता है।
  6. यह टेस्ट सूट के रूप में आपके परीक्षण मामलों को व्यवस्थित करने के तरीके प्रदान करता है।
  7. यह सरल और सुरुचिपूर्ण तरीके से परीक्षा परिणाम देता है।
  8. आप EUse, Android Studio, Maven & Ant, Gradle और Jenkins के साथ jUnit को एकीकृत कर सकते हैं

0

JUNIT वह विधि है जिसे आमतौर पर java developer द्वारा स्वीकार किया जाता है। जहां वे फ़ंक्शन के लिए समान अपेक्षित इनपुट प्रदान कर सकते हैं और तदनुसार निर्णय ले सकते हैं कि लिखित कोड पूरी तरह से लिखा गया है या यदि परीक्षण का मामला विफल रहता है तो अलग-अलग दृष्टिकोण को लागू करने की आवश्यकता हो सकती है। JUNIT तेजी से विकास करेगा और फ़ंक्शन में 0 दोषों को सुनिश्चित करेगा।


0

जून: OBSERVE और ADJUST

यहाँ JUNIT का मेरा दृष्टिकोण है।

JUNIT का उपयोग तब किया जा सकता है,
1) एक सिस्टम व्यवहार का निरीक्षण करें जब उस सिस्टम में एक नई इकाई जोड़ी जाती है।
2) सिस्टम में "नई" इकाई का स्वागत करने के लिए सिस्टम में समायोजन करें।
क्या? बिल्कुल सही।

वास्तविक जीवन उदा।

जब आपके रिश्तेदार आपके कॉलेज के छात्रावास के कमरे में जाते हैं, तो
1) आप अधिक जिम्मेदार होने का नाटक करेंगे।
2) आप उन सभी चीजों को रखेंगे जहां उन्हें होना चाहिए, जैसे जूते की रैक में जूते कुर्सी पर नहीं, अलमारी में कपड़े नहीं।
3) आपको सभी विवादों से छुटकारा मिलेगा।
4) आप अपने पास मौजूद हर डिवाइस में क्लीनअप शुरू कर देंगे।

प्रोग्रामिंग शब्दों में

सिस्टम: आपका कोड
UNIT: नई कार्यक्षमता।
चूंकि JUNIT फ्रेमवर्क का उपयोग JAVA भाषा के लिए किया जाता है इसलिए JUNIT = JAVA UNIT (हो सकता है)।

मान लीजिए कि आपके पास पहले से ही एक अच्छा बुलेटप्रूफ कोड है, लेकिन एक नई आवश्यकता आ गई और आपको अपने कोड में नई आवश्यकता को जोड़ना होगा। यह नई आवश्यकता कुछ इनपुट (टेस्टकेस) के लिए आपके कोड को तोड़ सकती है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.