JUnit उदाहरण के साथ ErrorCollector @Rule

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

JUnit ErrorCollector एक ऐसा नियम है जो किसी परीक्षण को विफलता के बाद भी चलते रहने देता है, सभी त्रुटि ऑब्जेक्ट को एकत्रित करता है और परीक्षण विधि के समाप्त होने पर उन्हें एक साथ रिपोर्ट करता है, न कि उसे रोक देता है।ping पहली समस्या पर।

  • 🔘 उद्देश्य: किसी अभिकथन, नेटवर्क या जीयूआई जांच के विफल होने के बाद भी परीक्षण जारी रखें, और फिर एकत्रित की गई सभी त्रुटियों की एक साथ रिपोर्ट करें।
  • घोषणा: सार्वजनिक गैर-स्थैतिक ErrorCollector फ़ील्ड पर @Rule बताता है JUnit प्रत्येक परीक्षण के साथ नियम को संलग्न करना।
  • संग्रह करना: addError(Throwable) किसी भी Error या Exception को स्टोर करता है, क्योंकि Throwable इन दोनों का पैरेंट है।
  • 🧪 जाँच: checkThat() एक मिलानकर्ता का मूल्यांकन करता है और शेष कथनों को रद्द किए बिना बेमेल होने की स्थिति को दर्ज करता है।
  • रिपोर्टिंग: विफलता tracई प्रत्येक एकत्रित फेंकने योग्य वस्तु को उसकी अपनी पंक्ति संख्या के साथ सूचीबद्ध करता है। JUnit राय।
  • 📌 JUnit 5: बृहस्पति ग्रह से नियम समाप्त हो गए हैं, इसलिए assertAll() या AssertJ SoftAssertions वही भूमिका निभाते हैं।

JUnit ErrorCollector नियम एक ही टेस्ट रन में कई त्रुटियों को एकत्रित करता है।

सामान्य परिदृश्य में, जब भी आप परीक्षण निष्पादन के दौरान किसी त्रुटि की पहचान करते हैं, तो आप परीक्षण रोक देते हैं, त्रुटि को ठीक करते हैं और परीक्षण को पुनः चलाते हैं।

परंतु JUnit इसका दृष्टिकोण थोड़ा अलग है। JUnit एरर कलेक्टर की मदद से, समस्या पाए जाने या टेस्ट विफल होने के बाद भी आप टेस्ट का निष्पादन जारी रख सकते हैं। एरर कलेक्टर सभी त्रुटि ऑब्जेक्ट्स को एकत्रित करता है और टेस्ट निष्पादन समाप्त होने के बाद केवल एक बार उनकी रिपोर्ट करता है।

त्रुटि संग्राहक का उपयोग क्यों करें?

टेस्ट स्क्रिप्ट लिखते समय, आप चाहते हैं कि नेटवर्क विफलता, अभिकथन विफलता या किसी अन्य कारण से कोड की कोई भी पंक्ति विफल होने पर भी सभी टेस्ट निष्पादित हों। ऐसी स्थिति में, आप एक विशेष सुविधा का उपयोग करके टेस्ट स्क्रिप्ट को निष्पादित करना जारी रख सकते हैं। JUnit जिसे "त्रुटि संग्राहक" के नाम से जाना जाता है।

इसके लिए, JUnit का उपयोग करता है @नियम एनोटेशनइसका उपयोग एरर कलेक्टर ऑब्जेक्ट बनाने के लिए किया जाता है। एरर कलेक्टर ऑब्जेक्ट बन जाने के बाद, आप इस विधि का उपयोग करके सभी त्रुटियों को आसानी से ऑब्जेक्ट में जोड़ सकते हैं। addError (फेंकी जा सकने वाली त्रुटि)। जैसा कि आप जानते हैं, फेंकने योग्य यह सुपर क्लास है अपवाद और त्रुटि कक्षाओं में Javaजब आप इस तरह से त्रुटियां जोड़ते हैं, तो ये त्रुटियां लॉग में दर्ज हो जाएंगी। JUnit परीक्षा परिणाम।

सभी त्रुटियों को एरर कलेक्टर में जोड़ने का लाभ यह है कि आप सभी त्रुटियों को एक साथ सत्यापित कर सकते हैं। साथ ही, यदि स्क्रिप्ट बीच में विफल हो जाती है, तो भी निष्पादन परीक्षण विधि के अंत तक जारी रहता है।

नोट: यदि आप किसी साधारण assert या try/catch ब्लॉक का उपयोग कर रहे हैं, तो त्रुटि संग्राहक विधि का उपयोग करना संभव नहीं होगा।

नमूना कोड

एरर कलेक्टर के बारे में अधिक जानने के लिए, नीचे दिए गए कोड उदाहरण को देखें, जो दर्शाता है कि एरर कलेक्टर ऑब्जेक्ट कैसे बनाया जाता है और उस ऑब्जेक्ट में सभी त्रुटियों को कैसे जोड़ा जाता है। tracसमस्या यह है:

package guru99.junit;		

import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							
    collector.checkThat(getResults(),			
                not(containsString("here is an error")));			
    // all lines of code will execute and at the end a combined failure will		
    be logged in.		
    }		
}	

नोट: यह एक उदाहरण मात्र है।tracयह फ़ाइल कंपाइल करने योग्य नहीं है। इसका अंतिम कमेंट बिना // के दूसरी पंक्ति में चला जाता है, और getResults() फ़ंक्शन और Hamcrest के मैचर्स नहीं दिखाए गए हैं। इसका पूरा रन करने योग्य संस्करण नीचे दिया गया है। ErrorCollector का उपयोग करके उदाहरण.

@Rule क्या है? JUnit?

JUnit यह परीक्षणों के प्रबंधन का एक विशेष तरीका प्रदान करता है। परीक्षण का मामला या टेस्ट सूट का उपयोग करके @नियम एनोटेशन@Rule का उपयोग करके, आप आसानी से परीक्षण के व्यवहार को जोड़ या पुनर्परिभाषित कर सकते हैं।

इसमें कई अंतर्निहित नियम दिए गए हैं। JUnit एक API जिसका उपयोग परीक्षक कर सकता है, और आप अपना खुद का नियम भी लिख सकते हैं। नियम का फ़ील्ड सार्वजनिक, गैर-स्थैतिक और TestRule को लागू करने वाले प्रकार का होना चाहिए।

नीचे दिए गए कोड की पंक्ति देखें, जो दर्शाती है कि @Rule एनोटेशन का उपयोग Error Collector के साथ कैसे किया जाता है:

@Rule				
public ErrorCollector collector= new ErrorCollector();

JUnit 5 नोट: Jupiter ने नियमों को एक्सटेंशन API से बदल दिया है, इसलिए org.junit.jupiter में @Rule और ErrorCollector मौजूद नहीं हैं। इनके निकटतम समकक्ष Assertions.assertAll() और AssertJ SoftAssertions हैं। JUnit यहां दिखाया गया कोड 4 अभी भी पुराने इंजन में चल रहा है। देखें JUnit एनोटेशन पूरे मानचित्र के लिए ट्यूटोरियलping.

ErrorCollector का उपयोग करके उदाहरण

एरर कलेक्टर को समझने के लिए, आइए एक क्लास और एक नियम बनाते हैं जो सभी एरर को इकट्ठा करेगा। यहाँ आप addError(throwable) का उपयोग करके सभी एरर जोड़ेंगे।

नीचे दिए गए कोड को देखें, जो केवल एक नियम बनाता है जो एक "त्रुटि संग्राहक ऑब्जेक्ट" है। इसका उपयोग अंत में समस्या की रिपोर्ट करने के लिए सभी त्रुटियों को जोड़ने के लिए किया जाता है:

ErrorCollectorExample.java

package guru99.junit;		

import org.junit.Assert;		
import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							

        System.out.println("Hello");					
        try {			
            Assert.assertTrue("A " == "B");					
        } catch (Throwable t) {					
            collector.addError(t);					
        }		
        System.out.println("World!!!!");					
    }		
}		

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

आइए उपरोक्त टेस्ट क्लास को टेस्ट रनर में जोड़कर उसे चलाएं और सभी त्रुटियों को एकत्रित करें। नीचे दिया गया कोड देखें:

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

आउटपुट:

विफलता देखें tracई, जो tracयह सभी त्रुटियों को एक ही स्थान पर इकट्ठा करता है। JUnit व्यू एक रन की गणना करता है लेकिन दो त्रुटियां और एक विफलता रिपोर्ट करता है, जिनमें से प्रत्येक का अपना लाइन नंबर होता है:

Eclipse JUnit विफलता tracएक ही रन में एकत्रित दो थ्रोएबल त्रुटियों और एक असर्शन त्रुटि को सूचीबद्ध करना।

के लाभ JUnit त्रुटि संग्राहक

आप एक का उपयोग कर सकते हैं JUnit अभिकथन उदाहरण के लिए, कार्यात्मक या जीयूआई सत्यापन के लिए:

  1. assertEquals(String message, Object expected, Object actual), जो दो वस्तुओं की समानता की तुलना करता है।
  2. इसी प्रकार, assertTrue(Boolean condition) यह दावा करता है कि शर्त सत्य है।

अभिकथनों का उपयोग करके, सत्यापन परीक्षण आसान हो जाता है। लेकिन एक बड़ी समस्या यह है कि यदि एक भी अभिकथन विफल हो जाता है तो परीक्षण निष्पादन रुक जाएगा।

टेस्ट ऑटोमेशन की सफलता के लिए टेस्ट की निरंतरता और रिकवरी हैंडलिंग बेहद महत्वपूर्ण है, और लंबी अवधि के टेस्ट में इसका सबसे ज्यादा महत्व है। Selenium ऐसे मामलों में जहां प्रत्येक असफल जांच के बाद ब्राउज़र को पुनः आरंभ करना खर्चीला होता है, वहां एरर कलेक्टर सबसे अच्छा उपाय है।

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

addError(Throwable) आपके द्वारा पहले से पकड़ी गई या बनाई गई त्रुटि को रिकॉर्ड करता है। checkThat(value, matcher) एक Hamcrest मैचर का मूल्यांकन करता है और स्वचालित रूप से एक बेमेल रिकॉर्ड करता है, इसलिए यह एक अभिकथन की तरह पढ़ा जाता है जबकि शेष कथनों को चलने की अनुमति देता है।

हाँ। विधि पूरी तरह से चलती है, फिर JUnit यह विफलता को चिह्नित करता है और विफलता में एकत्रित सभी फेंकने योग्य वस्तुओं को प्रिंट करता है। tracई. उदाहरण के तौर पर दिखाए गए स्क्रीनशॉट में एक ही परीक्षण विधि से दो त्रुटियां और एक विफलता दर्ज की गई है।

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

नहीं। जुपिटर ने नियम तंत्र को हटा दिया है, इसलिए org.junit.rules.ErrorCollector केवल इसमें मौजूद है। JUnit 4. समूहीकृत अभिकथनों के लिए Assertions.assertAll() का उपयोग करें, या जब अधिक समृद्ध मिलानकर्ताओं की आवश्यकता हो तो AssertJ SoftAssertions जोड़ें।

जी हां, और यह एक सामान्य पैटर्न है। कई फ़ील्ड वाले पेज को एक ही बार में वैलिडेट किया जा सकता है, जिससे पहले ही मिसमैच पर प्रोसेस रोकने के बजाय हर मिसमैच को इकट्ठा किया जा सके। इससे हर डिफेक्ट के लिए ब्राउज़र सेशन को रीस्टार्ट करने से बचा जा सकता है।

दोनों ही रिपोर्टिंग को स्थगित करते हैं, लेकिन SoftAssert को परीक्षण के अंत में स्पष्ट assertAll() कॉल की आवश्यकता होती है, जबकि ErrorCollector विधि के रिटर्न होने पर स्वचालित रूप से रिपोर्ट करता है। assertAll() को भूल जाना TestNG असफलताओं को चुपचाप छुपाता है।

एआई सहायकों का समूह एक लंबी विफलता का सामना कर रहा है। tracमूल कारण के आधार पर, बीस एकत्रित त्रुटियाँ कुछ विशिष्ट दोषों में तब्दील हो जाती हैं। वे यह भी सुझाव देते हैं कि कौन सी जाँचें अलग-अलग परीक्षणों के बजाय एक ही सामूहिक प्रक्रिया में होनी चाहिए।

गिटहब कोपिलॉट यह @Rule फ़ील्ड को आसानी से लिख देता है, लेकिन अक्सर इसे Jupiter टेस्ट क्लास में मिला देता है जहाँ नियम मौजूद नहीं होते। सूट चलाने से पहले सुनिश्चित करें कि आयात org.junit ही हैं।

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