JUnit 4 और TestNG तुलनीय हुआ करते थे। दो परीक्षण ढांचे के पेशेवरों और विपक्ष क्या हैं?
JUnit 4 और TestNG तुलनीय हुआ करते थे। दो परीक्षण ढांचे के पेशेवरों और विपक्ष क्या हैं?
जवाबों:
मैं आज TestNG और JUnit4 की तुलना कर रहा था, और मुख्य लाभ जो मैं परीक्षण-चौखटे में अपने सीमित अनुभव के साथ इंगित कर सकता हूं, वह यह है कि TestNG के पास डेटा-प्रदाता अवधारणा के साथ पैराट्राइज्ड परीक्षणों को संभालने का अधिक सुरुचिपूर्ण तरीका है।
जहां तक मैं JUnit4 के साथ बता सकता हूं कि आपको जिन मापदंडों के साथ परीक्षण करना चाहते हैं, उनके प्रत्येक सेट के लिए एक अलग परीक्षण वर्ग बनाना होगा (साथ चले @RunWith(Parameterized.class))। TestNG के साथ आपके पास एक ही परीक्षण वर्ग में कई डेटा-प्रदाता हो सकते हैं, इसलिए आप अपने सभी परीक्षण एकल वर्ग के लिए एक ही टेस्ट-क्लास में भी रख सकते हैं।
अब तक केवल यही बात है कि मैं JUnit4 पर TestNG के लाभ के रूप में इंगित कर सकता हूं।
Intellij IDEA में बॉक्स के बाहर TestNG और JUnit का समर्थन शामिल है। हालांकि, एक्लिप्स केवल बॉक्स से बाहर JUnit का समर्थन करता है और इसे काम करने के लिए स्थापित TestNG प्लगइन की आवश्यकता है।
हालाँकि, एक और अधिक कष्टप्रद समस्या जो मैंने TestNG के साथ चलाई है, वह यह है कि PowerMockTestCaseयदि आप अपने परीक्षणों में निर्भरता को कम करने के लिए PowerMock का उपयोग कर रहे हैं, तो आपके परीक्षण वर्गों को विस्तारित करने की आवश्यकता है । जाहिरा तौर पर ऑब्जेक्ट-फ़ैक्टरी को कॉन्फ़िगर करने के तरीके हैं जो आपके परीक्षण ढांचे को एक विशेष विधि के माध्यम से, या testng.xmlसूट परिभाषा के माध्यम से पावरमॉक का उपयोग करने के बारे में जानने की आवश्यकता है , लेकिन वे फिलहाल टूटने लगते हैं। मुझे नापसंद है कि टेस्ट-क्लास टेस्ट-फ्रेमवर्क क्लास का विस्तार करते हैं, यह हैकिश लगता है।
यदि आप PowerMock का उपयोग नहीं करते हैं, तो यह निश्चित रूप से एक मुद्दा नहीं है, लेकिन सभी में मुझे यह आभास होता है कि JUnit4 बेहतर समर्थित है।
दोनों चौखटे के साथ मेरे अनुभव के आधार पर, Testng में कुछ सुविधाजनक विशेषताएं हैं जो JUnit टीम ने कई वर्षों तक लागू करने से मना कर दिया है। मैं इस कारण से JUnit को प्राथमिकता देता हूं। टेस्ट करने के लिए परिवर्तित करना आसान है क्योंकि यह मूल रूप से JUnit में हर चीज का बहुत समर्थन करता है (यहां तक कि ग्रहण के लिए एक कनवर्टर प्लगइन भी है), इन अनुपलब्ध विशेषताओं के कारण JUnit में वापस परिवर्तित करना इतना महान नहीं है।
Testng @BeforeClassतरीकों में स्थिर नहीं होते हैं और उस कक्षा में परीक्षण से पहले निष्पादित होते हैं जब परीक्षण वर्ग लोड किया जाता है (JUnn व्यवहार)। मैंने एक बार एक JUnit प्रोजेक्ट किया था, जहाँ डेटाबेस के सभी परीक्षणों (कुछ दर्जन) ने शुरू में ही डेटाबेस को आरंभीकृत कर लिया था, जो कि काफी मूर्खतापूर्ण व्यवहार था। JUnit समुदाय में इसके खिलाफ बहुत बहस हुई। इसका सार यह था कि प्रत्येक परीक्षा पद्धति का अपना परीक्षण निर्धारण होना चाहिए और इसलिए आपके पास पहले की कोई ऐसी शैली विधि नहीं होनी चाहिए जो गैर-स्थिर हो क्योंकि इससे आप एक बार एक अस्थिर चर सेट कर सकते हैं और फिर अपने सभी परीक्षणों में इसका उपयोग कर सकते हैं। मान्य, लेकिन वास्तव में एकीकरण परीक्षणों के लिए कष्टप्रद। TestNG यूजर्स को यहां पर विकल्प देता है। जूनिट डिजाइन द्वारा नहीं है, जो कष्टप्रद है।
Testng डेटा प्रदाता JUnit समतुल्य की तुलना में थोड़ा अधिक लचीला होते हैं। आप प्रति परीक्षण निर्दिष्ट कर सकते हैं कि कौन सी डेटा प्रदाता विधि एक आकार देने के बजाय इनपुट प्रदान करना चाहिए जो पूरे वर्ग के लिए सभी दृष्टिकोण के रूप में जेयूईटीटी में है। इसलिए आपके पास एक कक्षा में आपके परीक्षणों के लिए सकारात्मक और नकारात्मक केस डेटा प्रदाता हो सकते हैं। बहुत अच्छा लगा।
आप @Testtestng के साथ एक वर्ग को चिह्नित कर सकते हैं , जिसका अर्थ है: प्रत्येक सार्वजनिक विधि एक परीक्षण है। जूनिट में आपको @Testहर विधि पर कॉपी / पेस्ट करना होगा।
दोनों के साथ एक झुंझलाहट है जिस तरह से हैमरेस्ट को JUnit के साथ बांधा जाता है और जिस तरह से JUnit को Testng के साथ बांधा जाता है। मावेन में ऐसे परिवर्तन होते हैं, जिनमें यह समस्या नहीं होती है।
दोनों चौखटों के साथ मेरी बड़ी चिंता यह है कि वे दोनों ही विकसित रूप में बंद हो गए हैं। रिलीज लगातार कम होती जा रही हैं और कम और कम उल्लेखनीय विशेषताएं हैं। पूरे बीडीडी आंदोलन का लगता है कि उदाहरण के लिए ढांचे पर बहुत कम प्रभाव पड़ा है। इसके अलावा, JUnit केवल वही सूचीबद्ध कर सकता है जो मैंने ऊपर सूचीबद्ध किया था। ऐसा कोई अच्छा तकनीकी कारण नहीं है कि JUnit इनमें से किसी भी चीज़ को लागू नहीं कर सकता है; JUnit के पीछे के लोग सिर्फ इन चीजों को लागू नहीं करने के लिए चुनते हैं। दोनों परियोजनाओं में भविष्य की दिशाओं के साथ-साथ एक दृष्टि की कमी भी प्रतीत होती है और वे पिछले कुछ वर्षों से सिर्फ मामूली बदलाव करते हुए खुश दिख रहे हैं।
मैं JUnit पर TestNG को स्विच करने के लिए एक अच्छे कारणों की तलाश कर रहा था और मुझे यह सवाल Tomek Kaczanowski द्वारा इस स्लाइड को बहुत अच्छी तरह से संबोधित करते हुए मिला । टोमेक प्रैक्टिकल यूनिट टेस्टिंग बुक के लेखक हैं जो डेवलपर्स और परीक्षकों द्वारा बहुत सम्मानित महसूस करते हैं।
यदि आप जावा / स्काला प्रोजेक्ट पर काम करते हैं और ग्रैडल आपकी पसंद का बिल्ड टूल है, तो ध्यान रखें कि ScalaTestफ्रेमवर्क में केवल JUnitRunnerआपके स्केला टेस्ट को चलाना है। दूसरे शब्दों में, आपके पास एक विकल्प है:
आप अपने नकली ढांचे के रूप में मॉकिटो का उपयोग कर सकते हैं। यह TestNG के साथ अच्छी तरह से एकीकृत करता है। Mockito का उपयोग करने के लिए आपको किसी वर्ग का विस्तार करने की आवश्यकता नहीं है। आप परीक्षण कोड इस तरह से कम युग्मित हैं और यदि किसी भी कारण से आपको अन्य नकली रूपरेखाओं का उपयोग करने की आवश्यकता है तो ऐसा करना आसान है।
संक्षेप में..
यदि आपका दायरा उनके बीच कोई निर्भरता के साथ ठीक विस्तृत इकाई परीक्षणों तक सीमित है, तो JUnit का उपयोग किया जा सकता है।
यदि आपके कार्यक्षेत्र में कार्यात्मक परीक्षण की आवश्यकता होती है जो परीक्षण के बीच निर्भरता और डेटा (मापदंडों) को साझा करने की आवश्यकता हो सकती है तो TestNG चुनें। इसके अलावा, TestNG JUnit के समान यूनिट परीक्षण कर सकता है। तो आप इकाई परीक्षण का एक सूट और कार्यात्मक परीक्षण का एक सूट हो सकता है।