JUnit टेस्ट केस @Before @BeforeClass एनोटेशन

⚡ स्मार्ट सारांश

JUnit यह यूनिट टेस्टिंग फ्रेमवर्क के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला फ्रेमवर्क है। Javaऔर इसके टेस्ट फिक्स्चर एनोटेशन यह नियंत्रित करते हैं कि टेस्ट क्लास के अंदर प्रत्येक टेस्ट मेथड के चलने से पहले और बाद में वास्तव में क्या होता है।

  • 🔘 स्थिरता: टेस्ट फिक्स्चर वस्तुओं और संसाधनों का वह निश्चित संदर्भ है जिसमें एक टेस्ट केस चलता है।
  • सेटअप: @Before प्रत्येक टेस्ट मेथड से पहले चलता है, जबकि @BeforeClass पूरी क्लास से पहले केवल एक बार चलता है।
  • चीथड़े कर दो: @After प्रत्येक परीक्षण के बाद चलता है, भले ही परीक्षण त्रुटि उत्पन्न करे या कोई अभिकथन विफल हो जाए।
  • 🧪 आदेश: सुपरक्लास @Before पहले चलता है, फिर सबक्लास @Before, @Test, और फिर प्रत्येक @After।
  • धावक: JUnitCore.runClasses() टेस्ट क्लास को निष्पादित करता है और प्रत्येक विफलता को दर्शाने वाला एक Result ऑब्जेक्ट लौटाता है।
  • 📊 JUnit 5: @Before, @After, @BeforeClass और @AfterClass, @BeforeEach, @AfterEach, @BeforeAll और @AfterAll बन जाते हैं।

JUnit @Before और @BeforeClass एनोटेशन के साथ टेस्ट फिक्स्चर

JUnit सबसे लोकप्रिय इकाई है परीक्षण ढांचे में Java. यह स्पष्ट रूप से अनुशंसित है इकाई का परीक्षण. JUnit वेब एप्लिकेशन का परीक्षण करने के लिए सर्वर की आवश्यकता नहीं होती है, जिससे परीक्षण प्रक्रिया तेज हो जाती है।

RSI JUnit फ्रेमवर्क परीक्षण मामलों और परीक्षण डेटा के त्वरित और आसान निर्माण की भी अनुमति देता है। org.junit इस पैकेज में कई इंटरफेस और क्लास शामिल हैं। JUnit टेस्टिंग, जैसे कि टेस्ट, असर्ट, आफ्टर और बिफोर। व्यापक JUnit परिवार इन्हीं मूलभूत तत्वों पर बनता है।

टेस्ट फिक्स्चर क्या होता है?

टेस्ट फिक्स्चर क्या होता है, यह समझने से पहले, आइए नीचे दिए गए कोड का अध्ययन करें।

यह कोड एक साधारण फ़ाइल पर दो परीक्षण मामलों को निष्पादित करने के लिए डिज़ाइन किया गया है।

public class OutputFileTest {
    private File output; 
    output = new File(...);
    output.delete(); 
public void testFile1(){
        //Code to verify Test Case 1
}
    output.delete();
    output = new File(...);
public void testFile2(){
        //Code to verify Test Case 2
}
 output.delete(); 
}

यहाँ कुछ मुद्दे हैं

  • यह कोड पठनीय नहीं है।
  • कोड को बनाए रखना आसान नहीं है।
  • जब परीक्षण सूट जटिल होता है तो कोड में तार्किक समस्याएं हो सकती हैं।

समान कोड की तुलना करें JUnit.

public class OutputFileTest		
{
    private File output; 
    @Before public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

यह कोड कहीं अधिक पठनीय और रखरखाव योग्य है। उपरोक्त कोड संरचना एक है। परीक्षण उपकरण।

टेस्ट फिक्सचर एक ऐसा संदर्भ है जहां JUnit परीक्षण का मामला रन। आम तौर पर, टेस्ट फिक्स्चर में शामिल हैं:

  • वे ऑब्जेक्ट या संसाधन जो किसी भी परीक्षण मामले के लिए उपलब्ध हैं।
  • इन वस्तुओं और संसाधनों को उपलब्ध कराने के लिए आवश्यक गतिविधियाँ।
  • ये गतिविधियाँ हैं
    1. आवंटन (व्यवस्था)
    2. डी-आवंटन (चीथड़े कर दो).

सेटअप और टियरडाउन

मैच इसलिए मायने रखते हैं क्योंकि JUnit ये हुक हर टेस्ट के आसपास चलते हैं।

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

इन JUnit नीचे टिप्पणियों पर चर्चा की गई है।

व्यवस्था

@पहले एनोटेशन में JUnit युक्त विधि पर प्रयोग किया जाता है Java यह कोड प्रत्येक टेस्ट केस से पहले चलता है, यानी यह प्रत्येक टेस्ट निष्पादन से पहले चलता है।

विध्वंस (फैसले की परवाह किए बिना)

@बाद एनोटेशन का उपयोग उस विधि पर किया जाता है जिसमें शामिल है Java प्रत्येक टेस्ट केस के बाद चलने वाला कोड। ये विधियाँ तब भी चलेंगी जब टेस्ट केस में कोई अपवाद उत्पन्न हो या अभिकथन विफल हो जाए।

नोट:

  • इसमें ऊपर सूचीबद्ध किसी भी संख्या में एनोटेशन रखने की अनुमति है।
  • सभी विधियाँ एनोटेट की गई हैं @पहले in JUnit प्रत्येक परीक्षण केस से पहले चलाए जाएंगे, लेकिन वे किसी भी क्रम में चलाए जा सकते हैं।
  • आप सुपर क्लास से @Before और @After विधियों को इनहेरिट कर सकते हैं। निष्पादन इस प्रकार है, और यह एक मानक निष्पादन प्रक्रिया है। JUnit.
  1. निष्पादित करें JUnit सुपरक्लास में @Before विधियाँ
  2. इस वर्ग में @Before विधियों को निष्पादित करें
  3. इस वर्ग में @Test विधि निष्पादित करें
  4. इस वर्ग में @After विधियों को निष्पादित करें
  5. सुपरक्लास में @After विधियों को निष्पादित करें

JUnit 5 नोट: ये टिप्पणियाँ हैं JUnit 4 (org.junit). JUnit 5 ने उनका नाम बदल दिया org.junit.jupiter.api, और JUnit नीचे दिए गए 4 कोड अभी भी पुराने इंजन के तहत चलते हैं।

JUnit 4 एनोटेशन JUnit 5 (बृहस्पति) समतुल्य रन
@पहले @BeforeEach प्रत्येक परीक्षण विधि से पहले
@बाद @प्रत्येक के बाद प्रत्येक परीक्षण विधि के बाद
@कक्षा से पहले @BeforeAll पूरी कक्षा के सामने एक बार
@कक्षा के बाद @आफ्टरऑल पूरी कक्षा के बाद एक बार
@अनदेखा करना @अक्षम एनोटेटेड टेस्ट को छोड़ देता है

उदाहरण: फ़ाइल को टेस्ट फ़िक्स्चर के रूप में उपयोग करके एक क्लास बनाना

public class OutputFileTest		
{
    private File output; 
    @Before	public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

उपरोक्त उदाहरण में निष्पादन की श्रृंखला इस प्रकार होगी। आरेख देखें। tracप्रत्येक परीक्षण विधि के लिए एक क्रिएट-टेस्ट-डिलीट चक्र होता है।

JUnit दो परीक्षण विधियों के इर्द-गिर्द @Before और @After निष्पादन श्रृंखला

  1. आउटपुट फ़ाइल बनाएं()
  2. टेस्टफ़ाइल1()
  3. आउटपुट फ़ाइल हटाएं()
  4. आउटपुट फ़ाइल बनाएं()
  5. टेस्टफ़ाइल2()
  6. आउटपुट फ़ाइल हटाएं()

कल्पना:

testFile1() testFile2() से पहले चलता है, जिसकी कोई गारंटी नहीं है।

केवल एक बार सेटअप

  • किसी भी परीक्षण के निष्पादन से पहले, तथा किसी भी परीक्षण से पहले, संपूर्ण परीक्षण वर्ग के लिए केवल एक बार विधि चलाना संभव है। @पहले विधि(याँ)।
  • "एक बार सेटअप" सर्वर शुरू करने, संचार खोलने और इसी तरह के कार्यों के लिए उपयोगी है। प्रत्येक परीक्षण के लिए संसाधनों को बंद करना और पुनः खोलना समय लेने वाला होता है।
  • यह एनोटेशन का उपयोग करके किया जा सकता है @कक्षा से पहले in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

यह विधि अवश्य होनी चाहिए सार्वजनिक स्थैतिक शून्यता, क्योंकि JUnit यह किसी भी टेस्ट इंस्टेंस के अस्तित्व में आने से पहले ही इसे कॉल करता है।

केवल एक बार फाड़ना

  • एक बार किए जाने वाले सेटअप की तरह ही, एक बार किया जाने वाला क्लीनअप मेथड भी उपलब्ध है। यह सभी टेस्ट केस मेथड के बाद चलता है। @बाद एनोटेशन निष्पादित किए गए हैं.
  • यह रोकने के लिए उपयोगी हैping सर्वरों को बंद करना और संचार लिंक को समाप्त करना।
  • यह का उपयोग करके किया जा सकता है @कक्षा के बाद एनोटेशन।
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit टेस्ट सूट

निर्धारित व्यवस्था हो जाने के बाद, संबंधित परीक्षण कक्षाओं को आमतौर पर एक साथ समूहित करके लॉन्च किया जाता है।

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

JUnit टेस्ट रनर

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

  • JUnitमूल इन परीक्षणों को निष्पादित करने के लिए class का उपयोग किया जाता है।
  • एक विधि जिसे रनक्लासेस द्वारा प्रदान की org.junit.रनर.JUnitमूल एक या कई परीक्षण कक्षाएं चलाने के लिए उपयोग किया जाता है।
  • इस विधि का रिटर्न प्रकार है परिणाम वस्तु (org.junit.runner.परिणाम), जिसका उपयोग परीक्षणों के बारे में जानकारी प्राप्त करने के लिए किया जाता है। अधिक स्पष्टता के लिए निम्नलिखित कोड उदाहरण देखें।
public class Test {				
			public static void main(String[] args) {									
       		Result result = JUnitCore.runClasses(CreateAndSetName.class);					
			for (Failure failure : result.getFailures()) {							
         		System.out.println(failure.toString());					
      }		
      System.out.println(result.wasSuccessful());					
   }		
}      

उपरोक्त कोड में, "result" ऑब्जेक्ट को संसाधित करके हमारे द्वारा निष्पादित किए जा रहे परीक्षण मामलों के असफल और सफल परिणाम प्राप्त किए जाते हैं। सहायक टूल जैसे कि दावा करें उन असफलताओं को उजागर करें, जबकि @अनदेखा करना परीक्षा छोड़ देता है।

JUnit 5 नोट: JUnitमूल विश्व का सबसे लोकप्रिय एंव JUnit 4 धावक। JUnit 5 इसे इससे बदल देता है JUnit मंच लांचर एपीआई, जिसे सामान्यतः आईईडी द्वारा प्रारंभ किया जाता है, Gradle या मेवन श्योरफायर।

प्रथम JUnit कार्यक्रम

एसडीएलसी का अच्छा ज्ञान होना चाहिए। Java प्रोग्रामिंग और इसके मूल सिद्धांतों सॉफ्टवेयर परिक्षण यह प्रक्रिया समझने में मदद करती है JUnit प्रोग्राम, साथ ही यह जानना कि कैसे इकाई परीक्षण एकीकरण परीक्षणों से भिन्न होते हैं।

आइए एक उदाहरण से यूनिट टेस्टिंग को समझते हैं। हमें एक टेस्ट क्लास बनानी होगी जिसमें एक टेस्ट मेथड हो और उस पर एनोटेशन लगा हो। @परीक्षा जैसा कि नीचे दिया गया है:

MyFirstClassTest.जावा

package guru99.JUnit;		

import static org.junit.Assert.*;				

import org.junit.Test;		

public class MyFirstClassTest {				

    @Test		
    public void myFirstMethod(){					
        String str= "JUnit is working fine";					
        assertEquals("JUnit is working fine",str);					
    }
}		

टेस्टरनर.जावा

हमारे टेस्ट मेथड (ऊपर) को निष्पादित करने के लिए, हमें एक टेस्ट रनर बनाने की आवश्यकता है। टेस्ट रनर में हमें टेस्ट क्लास को एक पैरामीटर के रूप में जोड़ना होगा। JUnitCore के runClasses() मेथड का उपयोग करके, यह मेथड टेस्ट के सफल या असफल होने के आधार पर टेस्ट का परिणाम लौटाएगा।

इस बारे में अधिक जानकारी के लिए नीचे दिया गया कोड देखें:

package guru99.JUnit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
            Result result = JUnitCore.runClasses(MyFirstClassTest.class);					
			for (Failure failure : result.getFailures()) {							
              System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

उत्पादन

एक बार टेस्टरनर.जावा हमारे परीक्षण विधियों को निष्पादित करने पर हमें असफल या सफल के रूप में आउटपुट प्राप्त होता है। कृपया नीचे आउटपुट का स्पष्टीकरण देखें:

  1. इस उदाहरण में, निष्पादन के बाद MyFirstClassTest.जावापरीक्षण सफल रहा और परिणाम हरे रंग में है।
  2. यदि यह विफल हो जाता तो परिणाम लाल रंग में दिखाई देता, और विफलता को विफलता के रूप में देखा जा सकता था। tracई. देखें JUnit नीचे GUI दिया गया है:

Eclipse JUnit MyFirstClassTest के लिए हरे रंग का पास बार दिखाने वाला दृश्य

अक्सर पूछे जाने वाले प्रश्न

JUnit यह प्रत्येक परीक्षण विधि के लिए परीक्षण वर्ग का एक नया इंस्टेंस बनाता है, इसलिए जब वर्ग-स्तरीय कोड को चलाना होता है तो कोई इंस्टेंस मौजूद नहीं होता है। विधि को स्टैटिक घोषित करने से यह संभव हो पाता है। JUnit इसे सीधे लागू करें।

नहीं। विधि क्रम जानबूझकर अनिर्दिष्ट है। JUnit 4 ऑफ़र @FixMethodOrder और JUnit 5 @TestMethodOrder प्रदान करता है, लेकिन ऑर्डर संकेतों के आधार पर युग्मित परीक्षण करता है।

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

नई परियोजनाओं में निम्नलिखित को शामिल किया जाना चाहिए: JUnit 5 एग्रीगेट आर्टिफैक्ट org.junit.jupiter:junit-jupiter. टीम्स जो लेगेसी को होल्ड करती हैं JUnit 4 सूटों में junit-vintage-engine जोड़ा गया है ताकि दोनों एक ही प्लेटफॉर्म पर चल सकें।

फिक्स्चर किसी टेस्ट के आसपास का पूरा तैयार किया गया संदर्भ होता है, जिसमें वास्तविक फाइलें या कनेक्शन शामिल होते हैं। मॉक एक वैकल्पिक सहयोगी होता है जिसका व्यवहार स्क्रिप्टेड होता है, और इसे अक्सर फिक्स्चर द्वारा बनाया जाता है।

हां, @BeforeClass के माध्यम से JUnit 4 या @BeforeAll में JUnit 5. साझा फिक्स्चर तेज़ होते हैं लेकिन स्थिति लीक करते हैं, इसलिए उन्हें महंगे रीड-ओनली संसाधनों के लिए आरक्षित रखें।

एआई सहायक एक क्लास को पढ़ते हैं, उसमें आवश्यक सहयोगियों का अनुमान लगाते हैं, और @Before सेटअप के साथ-साथ @After क्लीनअप भी तैयार करते हैं। कृपया स्वयं उत्पन्न किए गए अभिकथनों की समीक्षा अवश्य करें।

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: