JUnit उदाहरण के साथ एनोटेशन ट्यूटोरियल: @Test और @After क्या है

एचएमबी क्या है? JUnit एनोटेशन?

JUnit एनोटेशन वाक्यविन्यास मेटा-डेटा का एक विशेष रूप है जिसे जोड़ा जा सकता है Java बेहतर कोड पठनीयता और संरचना के लिए स्रोत कोड। चर, पैरामीटर, पैकेज, विधियाँ और क्लासेस को एनोटेट किया जा सकता है। एनोटेशन को Junit4 में पेश किया गया था, जो इसे आसान बनाता है Java कोड को अधिक पठनीय और सरल बनाया गया है। Junit3 और Junit4 के बीच यही बड़ा अंतर है कि Junit4 एनोटेशन आधारित है।

Junit5 में एनोटेशन के ज्ञान के साथ, कोई भी आसानी से सीख और कार्यान्वित कर सकता है JUnit परीक्षण। नीचे महत्वपूर्ण और अक्सर इस्तेमाल किया जाता है JUnit एनोटेशन सूची:

क्रमांक एनोटेशन विवरण
1. @परीक्षा यह एनोटेशन org.junit.TestCase का प्रतिस्थापन है जो यह इंगित करता है कि जिस सार्वजनिक void विधि से यह जुड़ा हुआ है उसे परीक्षण केस के रूप में निष्पादित किया जा सकता है।
2. @पहले इस एनोटेशन का उपयोग तब किया जाता है जब आप प्रत्येक परीक्षण मामले से पहले कुछ कथन, जैसे पूर्व शर्त, निष्पादित करना चाहते हैं।
3. @कक्षा से पहले इस एनोटेशन का उपयोग तब किया जाता है जब आप सभी परीक्षण मामलों से पहले कुछ कथनों को निष्पादित करना चाहते हैं, उदाहरण के लिए परीक्षण कनेक्शन को सभी परीक्षण मामलों से पहले निष्पादित किया जाना चाहिए।
4. @बाद यदि आप प्रत्येक कथन के बाद कुछ कथन निष्पादित करना चाहते हैं तो इस एनोटेशन का उपयोग किया जा सकता है परीक्षण का मामला उदाहरण के लिए वेरिएबल्स को रीसेट करना, अस्थायी फ़ाइलें, वेरिएबल्स आदि को हटाना।
5. @कक्षा के बाद इस एनोटेशन का उपयोग तब किया जा सकता है जब आप सभी परीक्षण मामलों के बाद कुछ कथनों को निष्पादित करना चाहते हैं, उदाहरण के लिए सभी परीक्षण मामलों को निष्पादित करने के बाद संसाधनों को जारी करना।
6. @अनदेखा इस एनोटेशन का उपयोग तब किया जा सकता है जब आप परीक्षण निष्पादन के दौरान कुछ कथनों को अनदेखा करना चाहते हैं, उदाहरण के लिए परीक्षण निष्पादन के दौरान कुछ परीक्षण मामलों को अक्षम करना।
7. @टेस्ट(समय समाप्त=500) इस एनोटेशन का उपयोग तब किया जा सकता है जब आप परीक्षण निष्पादन के दौरान कुछ समय सीमा निर्धारित करना चाहते हैं, उदाहरण के लिए यदि आप किसी SLA (सेवा स्तर समझौते) के तहत काम कर रहे हैं, और परीक्षणों को कुछ निर्दिष्ट समय के भीतर पूरा करने की आवश्यकता है।
8. @Test(अपेक्षित=IllegalArgumentException.class) यदि आप परीक्षण निष्पादन के दौरान कुछ अपवादों को संभालना चाहते हैं तो इस एनोटेशन का उपयोग किया जा सकता है। उदाहरण के लिए, यदि आप यह जांचना चाहते हैं कि कोई विशेष विधि निर्दिष्ट अपवाद फेंक रही है या नहीं।

JUnit एनोटेशन उदाहरण

आइए एक क्लास बनाएं जिसमें महत्वपूर्ण विषयों को शामिल किया जाए JUnit सरल प्रिंट स्टेटमेंट के साथ एनोटेशन बनाएं और इसे टेस्ट रनर क्लास के साथ निष्पादित करें:

चरण 1) नीचे दिए गए जावा क्लास पर विचार करें जिसमें विभिन्न विधियां हैं जो ऊपर सूचीबद्ध एनोटेशन से जुड़ी हैं:

JunitAnnotationsExample.java

package guru99.junit;		

import static org.junit.Assert.assertEquals;				
import static org.junit.Assert.assertFalse;				

import java.util.ArrayList;		

import org.junit.After;		
import org.junit.AfterClass;		
import org.junit.Before;		
import org.junit.BeforeClass;		
import org.junit.Ignore;		
import org.junit.Test;		

public class JunitAnnotationsExample {				

    private ArrayList<String> list;					

    @BeforeClass		
    public static void m1() {							
        System.out.println("Using @BeforeClass , executed before all test cases ");					
    }		

    @Before		
    public void m2() {					
        list = new ArrayList<String>();					
        System.out.println("Using @Before annotations ,executed before each test cases ");					
    }		

    @AfterClass		
    public static void m3() {							
        System.out.println("Using @AfterClass ,executed after all test cases");					
    }		

    @After		
    public void m4() {					
        list.clear();			
        System.out.println("Using @After ,executed after each test cases");					
    }		

    @Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

    @Ignore		
    public void m6() {					
        System.out.println("Using @Ignore , this execution is ignored");					
    }		

    @Test(timeout = 10)			
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

    @Test(expected = NoSuchMethodException.class)					
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					

    }		

}		

चरण 2) आइए उपरोक्त परीक्षण को निष्पादित करने के लिए एक टेस्ट रनर क्लास बनाएं:

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

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(JunitAnnotationsExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

अपेक्षित परिणाम

  • सभी परीक्षण मामलों को एक-एक करके निष्पादित किया जाएगा, और सभी प्रिंट स्टेटमेंट को कंसोल पर देखा जा सकेगा।
  • जैसा कि ऊपर दी गई तालिका में चर्चा की गई है, @Before एनोटेशन में JUnit, @BeforeClass [विधि m1() और m2() ] क्रमशः प्रत्येक और सभी परीक्षण मामलों से पहले निष्पादित की जाएगी।
  • उसी तरह @After in JUnit, @afterClass (विधि m3() और m4()) क्रमशः प्रत्येक और सभी परीक्षण मामलों के बाद निष्पादित की जाएगी। @ignore (विधि m6()) को परीक्षण की अनदेखी के रूप में माना जाएगा।

आइए उपरोक्त जावा क्लास में प्रयुक्त परीक्षण मामलों का विस्तार से विश्लेषण करें:

  1. नीचे दी गई विधि m5() पर विचार करें:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

उपरोक्त विधि में जैसा कि आप चर “सूची” में एक स्ट्रिंग जोड़ रहे हैं, इसलिए

  • सूची.खाली है() झूठा परिणाम लौटेगा.
  • दावाअसत्य(सूची.खाली है()) सत्य लौटना चाहिए.
  • परिणामस्वरूप, परीक्षण मामला पास.

चूंकि आपने सूची में केवल एक स्ट्रिंग जोड़ी है, इसलिए आकार एक है।

  • सूची.आकार() int मान “1” के रूप में लौटना चाहिए.
  • So assertEquals(1, सूची.आकार()) सत्य लौटना चाहिए.
  • परिणामस्वरूप, परीक्षण मामला पास.
  1. नीचे दी गई विधि m7() पर विचार करें:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

जैसा कि ऊपर चर्चा की गई है @Test(समय समाप्त = 10)एनोटेशन का उपयोग परीक्षण मामले में टाइमआउट लागू करने के लिए किया जाता है।

  1. नीचे दी गई विधि m8() पर विचार करें:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

जैसा कि ऊपर चर्चा की गई है @टेस्ट(अपेक्षित) इसके निष्पादन के दौरान निर्दिष्ट अपवाद की जाँच करेगा, इसलिए विधि m8() "ऐसा कोई विधि अपवाद नहीं" फेंक देगा। परिणामस्वरूप, परीक्षण अपवाद के साथ निष्पादित किया जाएगा।

चूंकि सभी परीक्षण मामले पास हो जाते हैं, इसलिए इसका परिणाम सफल परीक्षण निष्पादन होता है।

वास्तविक परिणाम

चूँकि उपरोक्त उदाहरण में तीन परीक्षण मामले हैं, इसलिए सभी परीक्षण मामलों को एक-एक करके निष्पादित किया जाएगा। नीचे आउटपुट देखें:

JUnit एनोटेशन उदाहरण
JUnit एनोटेशन उदाहरण

नीचे प्रिंट स्टेटमेंट देखें जिन्हें कंसोल पर देखा जा सकता है:

@BeforeClass का उपयोग करके, सभी परीक्षण मामलों से पहले निष्पादित किया गया

@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है

@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है

@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है

@Test(timeout) का उपयोग करके, इसका उपयोग टाइमआउट लागू करने के लिए किया जा सकता है JUnit4 परीक्षण मामला

@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है

@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है

@Test(expected) का उपयोग करके, यह निष्पादन के दौरान निर्दिष्ट अपवाद की जांच करेगा

@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है

@AfterClass का उपयोग करके, सभी परीक्षण मामलों के बाद निष्पादित किया गया

JUnit दावा वर्ग

यह क्लास कई सारे दावे विधियाँ प्रदान करता है जो टेस्ट केस लिखने में उपयोगी हैं। यदि सभी दावे कथन पास हो जाते हैं, तो परीक्षण परिणाम सफल होते हैं। यदि कोई भी दावा कथन विफल हो जाता है, तो परीक्षण परिणाम विफल हो जाते हैं।

जैसा कि आपने पहले देखा, नीचे दी गई तालिका महत्वपूर्ण Assert विधियों और विवरण का वर्णन करती है:

क्रमांक विधि विवरण
1. शून्य assertEquals(बूलियन अपेक्षित, बूलियन वास्तविक) यह जाँचता है कि क्या दो मान बराबर हैं या ऑब्जेक्ट क्लास की equals विधि के समान हैं
2. शून्य assertFalse(बूलियन स्थिति) कार्यक्षमता यह जांचना है कि कोई शर्त गलत है या नहीं।
3. void assertNotNull(ऑब्जेक्ट ऑब्जेक्ट) “assertNotNull” कार्यक्षमता यह जांचने के लिए है कि कोई ऑब्जेक्ट शून्य नहीं है।
4. void assertNull(ऑब्जेक्ट ऑब्जेक्ट) “assertNull” कार्यक्षमता यह जांचने के लिए है कि कोई ऑब्जेक्ट शून्य है या नहीं।
5. शून्य assertTrue(बूलियन स्थिति) “assertTrue” कार्यक्षमता यह जांचने के लिए है कि कोई शर्त सत्य है या नहीं।
6. शून्य विफल() यदि आप कोई अभिकथन त्रुटि उत्पन्न करना चाहते हैं, तो आपके पास fail() है, जिसके परिणामस्वरूप हमेशा विफलता का निर्णय होता है।
7. void assertSame([स्ट्रिंग संदेश] “assertSame” कार्यक्षमता यह जांचने के लिए है कि दो ऑब्जेक्ट एक ही ऑब्जेक्ट को संदर्भित करते हैं।
8. void assertNotSame([स्ट्रिंग संदेश] “assertNotSame” कार्यक्षमता यह जांचने के लिए है कि दो ऑब्जेक्ट एक ही ऑब्जेक्ट को संदर्भित नहीं करते हैं।

JUnit टेस्ट केस क्लास

एकाधिक परीक्षण चलाने के लिए, TestCase वर्ग उपलब्ध है org.junit.TestCase पैकेज. @Test एनोटेशन बताता है JUnit यह सार्वजनिक शून्य विधि (यहां परीक्षण मामला) जिससे यह जुड़ा हुआ है, एक परीक्षण मामले के रूप में चलाया जा सकता है।

नीचे दी गई तालिका में कुछ महत्वपूर्ण उपलब्ध विधियाँ दर्शाई गई हैं org.junit.TestCase वर्ग:

क्रमांक विधि विवरण
1. int गिनतीटेस्टकेस() इस विधि का उपयोग यह गिनने के लिए किया जाता है कि कितने परीक्षण मामलों को निष्पादित किया गया है रन(टेस्ट रिजल्ट tr) विधि.
2. टेस्ट रिजल्ट createResult() इस विधि का उपयोग एक बनाने के लिए किया जाता है परीक्षा परिणाम वस्तु।
3. स्ट्रिंग getName() यह विधि एक स्ट्रिंग लौटाती है जो कुछ और नहीं बल्कि एक है परीक्षण का मामला.
4. टेस्ट रिजल्ट रन() इस विधि का उपयोग एक परीक्षण को निष्पादित करने के लिए किया जाता है जो एक परिणाम लौटाता है परीक्षा परिणाम वस्तु
5. शून्य रन (TestResult परिणाम) इस विधि का उपयोग एक परीक्षण को निष्पादित करने के लिए किया जाता है परीक्षा परिणाम ऑब्जेक्ट जो कुछ भी नहीं लौटाता है.
6. void setName(स्ट्रिंग नाम) इस विधि का उपयोग किसी नाम को सेट करने के लिए किया जाता है परीक्षण मामला।
7. शून्य सेटअप() इस विधि का उपयोग संसाधन संबद्धता कोड लिखने के लिए किया जाता है। उदाहरण के लिए, डेटाबेस कनेक्शन बनाएँ।
8. शून्य टियरडाउन() इस विधि का उपयोग संसाधन रिलीज कोड लिखने के लिए किया जाता है। उदाहरण के लिए लेनदेन ऑपरेशन करने के बाद डेटाबेस कनेक्शन जारी करें।

JUnit टेस्टरिजल्ट क्लास

जब आप कोई परीक्षण निष्पादित करते हैं, तो यह एक परिणाम (के रूप में) लौटाता है परीक्षा परिणाम ऑब्जेक्ट)। इस TestResult ऑब्जेक्ट का उपयोग परिणामी ऑब्जेक्ट का विश्लेषण करने के लिए किया जा सकता है। यह परीक्षण परिणाम या तो विफल हो सकता है या सफल।

org.junit.TestResult वर्ग में प्रयुक्त महत्वपूर्ण विधियों के लिए नीचे दी गई तालिका देखें:

क्रमांक विधि विवरण
1. void addError(टेस्ट टेस्ट, Throwable t) यदि आपको परीक्षण में कोई त्रुटि जोड़ने की आवश्यकता हो तो इस विधि का उपयोग किया जाता है।
2. शून्य addFailure(टेस्ट परीक्षण, AssertionFailedError टी) इस विधि का उपयोग तब किया जाता है जब आपको विफलताओं की सूची में कोई विफलता जोड़ने की आवश्यकता होती है।
3. शून्य endTest(टेस्ट परीक्षण) इस विधि का उपयोग यह सूचित करने के लिए किया जाता है कि परीक्षण किया गया है(पूरा हुआ है)
4. int त्रुटि गणना() इस विधि का उपयोग परीक्षण निष्पादन के दौरान पाई गई त्रुटि का पता लगाने के लिए किया जाता है।
5. गणना त्रुटियाँ() यह विधि केवल त्रुटियों का एक संग्रह (यहाँ गणना) लौटाती है।
6. int विफलता गणना() इस विधि का उपयोग परीक्षण निष्पादन के दौरान पाई गई त्रुटियों की गणना करने के लिए किया जाता है।
7. शून्य रन (टेस्टकेस परीक्षण) इस विधि का उपयोग परीक्षण मामले को निष्पादित करने के लिए किया जाता है।
8. int रनकाउंट() यह विधि केवल निष्पादित परीक्षण की गणना करती है।
9. शून्य प्रारंभ टेस्ट (टेस्ट परीक्षण) इस विधि का उपयोग यह सूचित करने के लिए किया जाता है कि परीक्षण शुरू हो गया है।
10. शून्य रोक() इस विधि का प्रयोग रन को रोकने के लिए परीक्षण हेतु किया जाता है।

JUnit टेस्ट सूट क्लास

यदि आप एक निर्दिष्ट क्रम में कई परीक्षण निष्पादित करना चाहते हैं, तो यह सभी परीक्षणों को एक स्थान पर संयोजित करके किया जा सकता है। इस स्थान को टेस्ट सूट कहा जाता है।

उपयोग में लाई गई महत्वपूर्ण विधियों के लिए नीचे दी गई तालिका देखें org.junit.TestSuite वर्ग:

क्रमांक विधि विवरण
1. शून्य addTest(टेस्ट परीक्षण) यदि आप सूट में कोई परीक्षण जोड़ना चाहते हैं तो इस विधि का उपयोग किया जाता है।
2. शून्य addTestSuite(क्लास टेस्टक्लास) यदि आप सूट में परीक्षण जोड़ते समय क्लास निर्दिष्ट करना चाहते हैं तो इस विधि का उपयोग किया जाता है।
3. int गिनतीटेस्टकेस() यदि आप परीक्षण मामलों की संख्या गिनना चाहते हैं तो इस विधि का उपयोग किया जाता है।
4. स्ट्रिंग getName() इस विधि का उपयोग परीक्षण सूट का नाम प्राप्त करने के लिए किया जाता है।
5. शून्य रन (TestResult परिणाम) इस विधि का उपयोग परीक्षण निष्पादित करने और परीक्षण परिणाम एकत्र करने के लिए किया जाता है परीक्षा परिणाम वस्तु।
6. void setName(स्ट्रिंग नाम) इस विधि का उपयोग नाम निर्धारित करने के लिए किया जाता है परीक्षण सूट.
7. टेस्ट testAt(int index) यदि आप दिए गए इंडेक्स पर परीक्षण वापस करना चाहते हैं तो इस विधि का उपयोग किया जाता है।
8. int टेस्टकाउंट() यदि आप सुइट में कई परीक्षण लौटाना चाहते हैं तो इस विधि का उपयोग किया जाता है।
9. स्थैतिक परीक्षण चेतावनी(स्ट्रिंग संदेश) यह विधि एक परीक्षण लौटाती है जो असफल हो जाएगा और एक चेतावनी संदेश लॉग करेगा।

सारांश

  • JUnit एक पोर्टेबल एपीआई प्रदान करता है, जो सभी महत्वपूर्ण कक्षाएं प्रदान करता है और Selenium यूनिट परीक्षण लिखने में उपयोगी एनोटेशन.
  • टेस्ट केस लिखते समय बहुत उपयोगी क्लासेस
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • महत्वपूर्ण और अक्सर उपयोग किया जाने वाला JUnit एनोटेशन सूची@पहले@कक्षा से पहले@बाद में

    @कक्षा के बाद

    @परीक्षा

    @अनदेखा करना