JUnit 4 बनाम TestNG - अपडेट 2013 - 2014 [बंद]


88

JUnit 4 और TestNG तुलनीय हुआ करते थे। दो परीक्षण ढांचे के पेशेवरों और विपक्ष क्या हैं?


यदि आप फीचर तुलना को देख रहे हैं, तो jUnit 4 Vs testNG पर mkyong द्वारा एक अच्छा लेख है। यदि आप उपयोग तुलना का उल्लेख करना चाहते हैं। कपिल होप द्वारा एक अच्छा लेख है जो मदद करता है!
अंशु

71
मुझे SO पर यह बेहद मददगार जैसे सवाल लगते हैं ... मैं इसे पूछने का जोखिम उठाने के लिए धन्यवाद कहना चाहता था और इसे बंद न करने के लिए बधाई!
user1445967

अपने दर्शकों की पसंद के खिलाफ जाने का रास्ता: D
ctekk

2
इतने सालों बाद फिर से यह सवाल देखना। मजेदार बात यह है - मुझे साजिश की बू आ रही है! मेरा प्रश्न पूरी तरह से अलग-अलग कार्यात्मकताओं पर केंद्रित था, फिर एक "समुदाय" संपादित हुआ जिसने मेरे प्रश्न को "पेशेवरों और विपक्षों" के लिए संपादित किया और फिर राय आधारित होने के कारण प्रश्न को बंद कर दिया गया। Lmao।
ctekk

जवाबों:


29

मैं आज TestNG और JUnit4 की तुलना कर रहा था, और मुख्य लाभ जो मैं परीक्षण-चौखटे में अपने सीमित अनुभव के साथ इंगित कर सकता हूं, वह यह है कि TestNG के पास डेटा-प्रदाता अवधारणा के साथ पैराट्राइज्ड परीक्षणों को संभालने का अधिक सुरुचिपूर्ण तरीका है।

जहां तक ​​मैं JUnit4 के साथ बता सकता हूं कि आपको जिन मापदंडों के साथ परीक्षण करना चाहते हैं, उनके प्रत्येक सेट के लिए एक अलग परीक्षण वर्ग बनाना होगा (साथ चले @RunWith(Parameterized.class))। TestNG के साथ आपके पास एक ही परीक्षण वर्ग में कई डेटा-प्रदाता हो सकते हैं, इसलिए आप अपने सभी परीक्षण एकल वर्ग के लिए एक ही टेस्ट-क्लास में भी रख सकते हैं।

अब तक केवल यही बात है कि मैं JUnit4 पर TestNG के लाभ के रूप में इंगित कर सकता हूं।

Intellij IDEA में बॉक्स के बाहर TestNG और JUnit का समर्थन शामिल है। हालांकि, एक्लिप्स केवल बॉक्स से बाहर JUnit का समर्थन करता है और इसे काम करने के लिए स्थापित TestNG प्लगइन की आवश्यकता है।

हालाँकि, एक और अधिक कष्टप्रद समस्या जो मैंने TestNG के साथ चलाई है, वह यह है कि PowerMockTestCaseयदि आप अपने परीक्षणों में निर्भरता को कम करने के लिए PowerMock का उपयोग कर रहे हैं, तो आपके परीक्षण वर्गों को विस्तारित करने की आवश्यकता है । जाहिरा तौर पर ऑब्जेक्ट-फ़ैक्टरी को कॉन्फ़िगर करने के तरीके हैं जो आपके परीक्षण ढांचे को एक विशेष विधि के माध्यम से, या testng.xmlसूट परिभाषा के माध्यम से पावरमॉक का उपयोग करने के बारे में जानने की आवश्यकता है , लेकिन वे फिलहाल टूटने लगते हैं। मुझे नापसंद है कि टेस्ट-क्लास टेस्ट-फ्रेमवर्क क्लास का विस्तार करते हैं, यह हैकिश लगता है।

यदि आप PowerMock का उपयोग नहीं करते हैं, तो यह निश्चित रूप से एक मुद्दा नहीं है, लेकिन सभी में मुझे यह आभास होता है कि JUnit4 बेहतर समर्थित है।


5
ऐसा नहीं है कि मानकीकृत परीक्षणों के वैकल्पिक कार्यान्वयन हैं, उदाहरण के लिए code.google.com/p/junitparams और यदि आप उनमें से किसी को पसंद नहीं करते हैं, तो आप अपना स्वयं का लिख ​​सकते हैं - यही मैं JUnit की व्यापकता के बारे में पसंद करता हूं। ;)
एस्को लुओटोला

17

दोनों चौखटे के साथ मेरे अनुभव के आधार पर, Testng में कुछ सुविधाजनक विशेषताएं हैं जो JUnit टीम ने कई वर्षों तक लागू करने से मना कर दिया है। मैं इस कारण से JUnit को प्राथमिकता देता हूं। टेस्ट करने के लिए परिवर्तित करना आसान है क्योंकि यह मूल रूप से JUnit में हर चीज का बहुत समर्थन करता है (यहां तक ​​कि ग्रहण के लिए एक कनवर्टर प्लगइन भी है), इन अनुपलब्ध विशेषताओं के कारण JUnit में वापस परिवर्तित करना इतना महान नहीं है।

  • Testng @BeforeClassतरीकों में स्थिर नहीं होते हैं और उस कक्षा में परीक्षण से पहले निष्पादित होते हैं जब परीक्षण वर्ग लोड किया जाता है (JUnn व्यवहार)। मैंने एक बार एक JUnit प्रोजेक्ट किया था, जहाँ डेटाबेस के सभी परीक्षणों (कुछ दर्जन) ने शुरू में ही डेटाबेस को आरंभीकृत कर लिया था, जो कि काफी मूर्खतापूर्ण व्यवहार था। JUnit समुदाय में इसके खिलाफ बहुत बहस हुई। इसका सार यह था कि प्रत्येक परीक्षा पद्धति का अपना परीक्षण निर्धारण होना चाहिए और इसलिए आपके पास पहले की कोई ऐसी शैली विधि नहीं होनी चाहिए जो गैर-स्थिर हो क्योंकि इससे आप एक बार एक अस्थिर चर सेट कर सकते हैं और फिर अपने सभी परीक्षणों में इसका उपयोग कर सकते हैं। मान्य, लेकिन वास्तव में एकीकरण परीक्षणों के लिए कष्टप्रद। TestNG यूजर्स को यहां पर विकल्प देता है। जूनिट डिजाइन द्वारा नहीं है, जो कष्टप्रद है।

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

  • आप @Testtestng के साथ एक वर्ग को चिह्नित कर सकते हैं , जिसका अर्थ है: प्रत्येक सार्वजनिक विधि एक परीक्षण है। जूनिट में आपको @Testहर विधि पर कॉपी / पेस्ट करना होगा।

दोनों के साथ एक झुंझलाहट है जिस तरह से हैमरेस्ट को JUnit के साथ बांधा जाता है और जिस तरह से JUnit को Testng के साथ बांधा जाता है। मावेन में ऐसे परिवर्तन होते हैं, जिनमें यह समस्या नहीं होती है।

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


9

मैं JUnit पर TestNG को स्विच करने के लिए एक अच्छे कारणों की तलाश कर रहा था और मुझे यह सवाल Tomek Kaczanowski द्वारा इस स्लाइड को बहुत अच्छी तरह से संबोधित करते हुए मिला । टोमेक प्रैक्टिकल यूनिट टेस्टिंग बुक के लेखक हैं जो डेवलपर्स और परीक्षकों द्वारा बहुत सम्मानित महसूस करते हैं।


1

यदि आप जावा / स्काला प्रोजेक्ट पर काम करते हैं और ग्रैडल आपकी पसंद का बिल्ड टूल है, तो ध्यान रखें कि ScalaTestफ्रेमवर्क में केवल JUnitRunnerआपके स्केला टेस्ट को चलाना है। दूसरे शब्दों में, आपके पास एक विकल्प है:

  • Java JUnit परीक्षण + Scala टेस्ट JUnitRunner => बेहतर ग्रेड एकीकरण के साथ चलते हैं
  • जावा टेस्टएनजी टेस्ट + स्काला टेस्ट्स स्कैला रनर => पुअर ग्रैडल इंटीग्रेशन के साथ चलते हैं, क्योंकि स्कैड टेस्ट रनर ग्रैड के दृष्टिकोण से एक एकल थोक कार्य है।

0

आप अपने नकली ढांचे के रूप में मॉकिटो का उपयोग कर सकते हैं। यह TestNG के साथ अच्छी तरह से एकीकृत करता है। Mockito का उपयोग करने के लिए आपको किसी वर्ग का विस्तार करने की आवश्यकता नहीं है। आप परीक्षण कोड इस तरह से कम युग्मित हैं और यदि किसी भी कारण से आपको अन्य नकली रूपरेखाओं का उपयोग करने की आवश्यकता है तो ऐसा करना आसान है।


7
यह उत्तर बस सवाल के लिए पूरी तरह अप्रासंगिक है ....
एड्रियन शुम

11
@ AdrianShum मुझे लगता है कि कोनराड JeroenHoek बिंदु पर TestNG के साथ PowerMock को एकीकृत करने के बारे में टिप्पणी करने की कोशिश कर रहा था, क्योंकि उसे "टिप्पणी" विशेषाधिकार नहीं लगता है, मुझे लगता है कि वह अपनी टिप्पणी को एक जवाब के रूप में
रखता है

1
यह जवाब गलत बताता है कि पावरमॉक क्या है। यह मॉकिटो के लिए एक प्रतिस्थापन नहीं है, लेकिन एक पूरक जो मॉकिटो को कुछ ऐसी चीजों को नकली करने की अनुमति देता है जो अकेले मॉकिटो (स्थिर तरीके, अंतिम कक्षाएं) नहीं कर सकते हैं।
स्टिकफिगर करें

0

संक्षेप में..

यदि आपका दायरा उनके बीच कोई निर्भरता के साथ ठीक विस्तृत इकाई परीक्षणों तक सीमित है, तो JUnit का उपयोग किया जा सकता है।

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

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