TestNG vs JUnit – उनके बीच अंतर
के बीच मुख्य अंतर TestNG और JUnit
- TestNG एक Java-आधारित ढांचा, जबकि JUnit जावा के लिए एक ओपन-सोर्स यूनिट परीक्षण फ्रेमवर्क है।
- तुलना TestNG Vs JUnit, TestNG एनोटेशन का उपयोग करना और समझना आसान है JUnit.
- TestNG हमें समानांतर परीक्षण बनाने की अनुमति देता है, जबकि JUnit समानांतर परीक्षण चलाने का समर्थन नहीं करता है.
- In TestNG, परीक्षण मामलों को एक साथ समूहीकृत किया जा सकता है, जबकि JUnitपरीक्षणों को एक साथ समूहीकृत करना संभव नहीं है।

एचएमबी क्या है? TestNG?
TestNG एक स्वचालन परीक्षण ढांचा है जिसमें एनजी का अर्थ "नेक्स्ट जेनरेशन" है। TestNG से प्रेरित है JUnit जो एनोटेशन (@) का उपयोग करता है. TestNG के नुकसानों पर काबू पाता है JUnit और इसे बनाने के लिए डिज़ाइन किया गया है अंत-से-अंत परीक्षण आसान।
का प्रयोग TestNG, आप एक उचित रिपोर्ट तैयार कर सकते हैं, और आप आसानी से जान सकते हैं कि कितने परीक्षण मामले पास हुए, असफल हुए और छोड़े गए। आप असफल परीक्षण मामलों को अलग से निष्पादित कर सकते हैं।
जूनिट क्या है?
JUnit एक खुला स्रोत इकाई है परीक्षण JAVA के लिए फ्रेमवर्क। यह निम्न के लिए उपयोगी है Java डेवलपर्स को दोहराए जाने वाले परीक्षण लिखने और चलाने के लिए। एरिक गामा और केंट बेक ने शुरू में इसे विकसित किया। यह xUnit आर्किटेक्चर का एक उदाहरण है। जैसा कि नाम से ही स्पष्ट है, इसका उपयोग इसके लिए किया जाता है इकाई का परीक्षण कोड के एक छोटे से हिस्से का.
जो डेवलपर्स परीक्षण-संचालित पद्धति का पालन कर रहे हैं, उन्हें किसी भी कोड से पहले यूनिट परीक्षण लिखना और उसे क्रियान्वित करना होगा।
एक बार जब आप कोड के साथ काम कर लेते हैं, तो आपको सभी परीक्षण निष्पादित करने चाहिए, और यह पास होना चाहिए। हर बार जब कोई कोड जोड़ा जाता है, तो आपको सभी परीक्षण मामलों को फिर से निष्पादित करना होगा और सुनिश्चित करना होगा कि कुछ भी टूटा हुआ न हो।
दोनों के बीच मतभेद JUnit और TestNG
दोनों TestNG और JUnit4 एक या दो विशेषताओं को छोड़कर एक जैसा दिखता है। आइए दोनों के बीच तुलना करके जल्दी से तय करें कि यूनिट टेस्टिंग के लिए कौन सी तकनीक ज़्यादा अनुकूल है। नीचे दी गई तालिका में दोनों द्वारा समर्थित सुविधाओं पर प्रकाश डाला गया है:
एनोटेशन
दोनों JUnit और TestNG एनोटेशन का उपयोग करता है और लगभग सभी एनोटेशन समान दिखते हैं।
TestNG @BeforeMethod ,@AfterMethod का उपयोग @Before ,@After के समान करता है JUnit4.
दोनों TestNG और Junit4 टाइमआउट के लिए @Test(timeout = 1000) का उपयोग करता है। अधिक जानकारी के लिए नीचे दी गई तालिका देखें-
| एस.एन. | विवरण | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | परीक्षण एनोटेशन | @परीक्षा | @परीक्षा |
| 2 | वर्तमान क्लास में प्रथम परीक्षण विधि लागू होने से पहले निष्पादित होता है | @कक्षा से पहले | @कक्षा से पहले |
| 3 | वर्तमान क्लास में सभी परीक्षण विधियों के बाद निष्पादित होता है | @कक्षा के बाद | @कक्षा के बाद |
| 4 | प्रत्येक परीक्षण विधि से पहले निष्पादित होता है | @BeforeMethod | @पहले |
| 5 | प्रत्येक परीक्षण विधि के बाद निष्पादित होता है | @ आफ्टरमेथोड | @बाद |
| 6 | परीक्षण को अनदेखा करने के लिए एनोटेशन | @टेस्ट(सक्षम=झूठ) | @अनदेखा करना |
| 7 | अपवाद के लिए टिप्पणी | @Test(अपेक्षित अपवाद = अंकगणित अपवाद.class) | @Test(अपेक्षित = ArithmeticException.class) |
| 8 | मध्यांतर | @Test(समय समाप्त = 1000) | @Test(समय समाप्त = 1000) |
| 9 | सुइट में सभी परीक्षणों से पहले निष्पादित होता है | @BeforeSuite | N / A |
| 10 | सुइट में सभी परीक्षणों के बाद निष्पादित होता है | @ आफ्टरसाइट | N / A |
| 11 | परीक्षण चलाने से पहले निष्पादित होता है | @ सबसे पहले | N / A |
| 12 | परीक्षण चलाने के बाद निष्पादित होता है | @ बाद में | N / A |
| 13 | इनमें से किसी भी समूह से संबंधित प्रथम परीक्षण विधि लागू होने से पहले निष्पादित होता है | @ बिफोरग्रुप्स | N / A |
| 14 | यहां किसी भी समूह से संबंधित अंतिम परीक्षण विधि के बाद चलाएं | @ बाद के समूह | N / A |
सुइट परीक्षण
सुइट्स का उपयोग कई परीक्षणों को एक साथ निष्पादित करने के लिए किया जाता है। सुइट्स को दोनों का उपयोग करके बनाया जा सकता है TestNG और JUnit4. हालाँकि, सुइट्स अधिक शक्तिशाली हैं TestNG क्योंकि यह परीक्षणों के निष्पादन के लिए बहुत अलग विधि का उपयोग करता है। आइए नीचे दिए गए कोड स्निपेट का उपयोग करके इसे समझें:
का प्रयोग JUnit4
नीचे दिया गया वर्ग काम करते समय सुइट के उपयोग का वर्णन करता है JUnit4:
package guru99.junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
SuiteTest1.class,
SuiteTest2.class,
})
public class JunitTest {
// This class remains empty,it is used only as a holder for the above annotations
}
का प्रयोग TestNG
TestNG सभी परीक्षणों को एक स्थान पर बंडल करने के लिए xml का उपयोग करता है। नीचे xml के साथ काम करते समय सूट के उपयोग का वर्णन किया गया है TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
परीक्षण को अनदेखा करें
दोनों का उपयोग करके हम एक परीक्षण को छोड़ सकते हैं। आइए इसे नीचे दिए गए कोड उदाहरण का उपयोग करके देखें:
का प्रयोग JUnit4
नीचे दिया गया कोड स्निपेट कार्य करते समय @ignore एनोटेशन के उपयोग का वर्णन करता है JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
का प्रयोग TestNG
नीचे दिया गया कोड स्निपेट कार्य करते समय @Test(enabled=false) एनोटेशन के उपयोग का वर्णन करता है TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
अपवाद परीक्षण
अपवाद परीक्षण दोनों में उपलब्ध है TestNG और JUnit4. इसका प्रयोग यह जांचने के लिए किया जाता है कि परीक्षण से कौन सा अपवाद उत्पन्न हुआ है?
का प्रयोग JUnit4
नीचे दिया गया कोड स्निपेट कार्य करते समय अपवाद परीक्षण के उपयोग का वर्णन करता है JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
का प्रयोग TestNG
नीचे दिया गया कोड स्निपेट कार्य करते समय अपवाद परीक्षण के उपयोग का वर्णन करता है TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
मध्यांतर
यह सुविधा टेस्टएनजी और दोनों में लागू की गई है JUnit4.टाइमआउट का उपयोग उस परीक्षण को समाप्त करने के लिए किया जाता है जो निर्दिष्ट समय (मिलीसेकंड में) से अधिक समय लेता है।
का प्रयोग JUnit4
नीचे दिया गया कोड स्निपेट कार्य करते समय टाइमआउट परीक्षण के उपयोग का वर्णन करता है JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
का प्रयोग TestNG
नीचे दिया गया कोड स्निपेट कार्य करते समय टाइमआउट परीक्षण के उपयोग का वर्णन करता है TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
पैरामीटरीकृत परीक्षण
JUnit परीक्षण के लिए एक आसान और पठनीय दृष्टिकोण प्रदान करता है जिसे पैरामीटराइज्ड परीक्षण के रूप में जाना जाता है। TestNG और JUnit पैरामीटराइज़्ड टेस्ट का समर्थन करता है लेकिन वे पैरामीटर मान को परिभाषित करने के तरीके में भिन्न हैं। आइए इसे एक-एक करके देखें।
का प्रयोग JUnit4
“@RunWith” और “@Parameter” एनोटेशन का उपयोग यूनिट टेस्ट के लिए पैरामीटर मान प्रदान करने के लिए किया जाता है। एनोटेशन @Parameters को List[] लौटाना होगा। यह पैरामीटर क्लास कन्स्ट्रक्टर में एक तर्क के रूप में पास किया जाएगा।
@RunWith(value = Parameterized.class)
public class JunitTest{
privateint number;
public JunitTest6(int number)
{
this.number = number;
}
@Parameters
public static Collection<Object[]> data()
{
Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
returnArrays.asList(data);
}
@Test
public void parameterTest()
{
System.out.println("Parameterized Number is : " + number);
}
}
का प्रयोग TestNG
In TestNG, XML फ़ाइल या “@DataProvider” का उपयोग परीक्षण के लिए पैरामीटर प्रदान करने के लिए किया जाता है।
यहाँ विधि में घोषित @Parameters एनोटेशन को परीक्षण के लिए एक पैरामीटर की आवश्यकता है। पैरामीटर के रूप में उपयोग किया जाने वाला डेटा प्रदान करेगा TestNGकी XML कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके, हम एक ही कॉन्फ़िगरेशन फ़ाइल का पुनः उपयोग कर सकते हैं। परीक्षण का मामला विभिन्न डेटा सेटों के साथ, हम अलग-अलग परिणाम प्राप्त कर सकते हैं।
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
उपरोक्त क्लास के लिए उपयोग की जाने वाली xml फ़ाइल नीचे देखें:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<parameter name="number" value="2"/>
<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>
सारांश
हमने देखा JUnit4 और TestNG तुलना विस्तार से। हमने यह भी देखा कि दोनों पैरामीटराइज्ड टेस्ट और डिपेंडेंसी टेस्ट को छोड़कर समान हैं। संक्षेप में हम कह सकते हैं कि लचीलेपन और आवश्यकता के आधार पर हम यूनिट टेस्टिंग के लिए उनमें से किसी एक को चुन सकते हैं।

