बनाएं JUnit उदाहरण के साथ टेस्ट सूट: @RunWith @SuiteClasses
⚡ स्मार्ट सारांश
JUnit टेस्ट सूट कई क्लासों से टेस्ट केसों को एकत्रित करते हैं ताकि वे एक ही पास में एक साथ चल सकें, जो @RunWith(Suite.class) और @SuiteClasses एनोटेशन द्वारा संचालित होते हैं और एक सामान्य टेस्ट रनर क्लास के माध्यम से लॉन्च किए जाते हैं।

In JUnitएक टेस्ट सूट हमें सभी को एकत्रित करने की अनुमति देता है। परीक्षण के मामलों कई कक्षाओं को एक ही स्थान पर एकत्रित करें और उन्हें एक साथ चलाएं।
सूट टेस्ट चलाने के लिए, आपको नीचे दिए गए एनोटेशन का उपयोग करके एक क्लास को एनोटेट करना होगा:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) या @Suite.SuiteClasses({test1.class, test2.class…})
उपरोक्त एनोटेशन के साथ, सूट में मौजूद सभी टेस्ट क्लास एक-एक करके चलने लगेंगी। सूट क्लास स्वयं खाली रहती है: यह केवल एनोटेशन के लिए एक होल्डर है, और रनर इन एनोटेशन को पढ़कर तय करता है कि क्या चलाना है।
टेस्ट सूट और टेस्ट रनर बनाने के चरण
नीचे दिए गए चार चरण सबसे छोटा सूट बनाते हैं जो वास्तव में चलता है: दो सामान्य परीक्षण वर्ग, एक सूट वर्ग जो उन्हें नाम देता है, और एक रनर जो मुख्य विधि से सूट शुरू करता है।
चरण 1) एक सरल टेस्ट क्लास (जैसे MyFirstClassTest) बनाएं और उसमें एक मेथड जोड़ें जिस पर यह एनोटेशन लगा हो। @परीक्षा.
पहली क्लास में एक खाली टेस्ट मेथड है, जो यह साबित करने के लिए पर्याप्त है कि सूट इसे उठा लेता है:
चरण 2) जोड़ने के लिए एक और टेस्ट क्लास बनाएं (उदाहरण के लिए MySecondClassTest) और @Test एनोटेशन से युक्त एक मेथड बनाएं।
दूसरी श्रेणी का आकार बिल्कुल समान है, इसलिए इस सूट में एकत्रित करने के लिए दो अलग-अलग श्रेणियां हैं:
चरण 3) टेस्टसुइट बनाने के लिए आपको सबसे पहले क्लास को @RunWith(Suite.class) और @SuiteClasses(class1.class, class2.class…) से एनोटेट करना होगा।
ध्यान दें कि टेस्टसुइटएक्ज़ैमल नामक सूट क्लास स्वयं कोई टेस्ट विधि घोषित नहीं करती है - सारी जानकारी दो एनोटेशन में ही निहित है:
चरण 4) नीचे दिए गए अनुसार हमारे टेस्ट सूट को चलाने के लिए एक टेस्ट रनर क्लास बनाएं:
धावक एक साधारण है Java एक क्लास जिसमें एक मुख्य विधि है जो सूट क्लास को सौंपती है JUnitकोर:
Code स्पष्टीकरण:
- Code रेखा 8: क्लास टेस्ट के मुख्य मेथड को घोषित करना जो हमारे कोड को चलाएगा JUnit परीक्षण.
- Code रेखा 9: टेस्ट केस निष्पादित करना JUnitCore.runClasses जो टेस्ट क्लास का नाम पैरामीटर के रूप में लेता है (ऊपर दिए गए उदाहरण में, आप चरण 3 में दिखाए गए TestSuiteExample.class का उपयोग कर रहे हैं)।
- Code रेखा 11: परिणाम को फॉर लूप का उपयोग करके संसाधित करना और असफल परिणाम को प्रिंट करना।
- Code रेखा 13: सफल परिणाम का मुद्रण करना।
आउटपुट: यह आउटपुट एक सफल परीक्षण को दर्शाता है जिसमें कोई विफलता नहीं है। tracजैसा कि नीचे दिया गया है:
हरी पट्टी इस बात की पुष्टि करती है कि सूट किस लिए है: एक लॉन्च, एक परिणाम दृश्य, और दोनों क्लासों की रिपोर्ट सूट नोड के अंतर्गत दी जाती है, न कि दो अलग-अलग रन में।
JUnit टेस्ट सूट उदाहरण
एक अधिक जटिल उदाहरण पर विचार करें, जिसमें सूट के भीतर की कक्षाएं वास्तव में जोर किसी खाली मेथड को रखने के बजाय कुछ और करना।
JunitTest.जावा
JunitTest.java एक साधारण क्लास है जिस पर निम्नलिखित एनोटेशन लगे हैं: @साथ चलाएं और @सूट एनोटेशन। आप सूट में कितनी भी क्लास को पैरामीटर के रूप में सूचीबद्ध कर सकते हैं, जैसा कि नीचे दिया गया है:
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 }
SuiteTest1.जावा
SuiteTest1.जावा यह एक टेस्ट क्लास है जिसमें टेस्ट मेथड हैं जो नीचे दिए गए अनुसार एक संदेश प्रिंट करते हैं। आप इस क्लास को ऊपर उल्लिखित क्लास में सूट मेंबर के रूप में उपयोग करेंगे। यह एक हेल्पर क्लास पर निर्भर करता है जिसका नाम है JUnitयह संदेश, जिसे इसी पैकेज में कहीं और परिभाषित किया गया है और यहां पुन: प्रस्तुत नहीं किया गया है।
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.जावा
SuiteTest2.जावा यह एक और परीक्षण वर्ग है, जो इसके समान है। SuiteTest1.जावाइस क्लास में नीचे दिए गए संदेश को प्रिंट करने के लिए एक टेस्ट मेथड है। आप इस क्लास को सूट मेंबर के रूप में उपयोग करेंगे। JunitTest.जावा.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
उत्पादन
क्रियान्वित करने के बाद जूनिटटेस्ट.java फ़ाइल, जिसमें एक सूट शामिल है SuiteTest1.जावा और SuiteTest2.जावाआपको नीचे दिया गया आउटपुट मिलेगा। कंसोल दोनों क्लास द्वारा उत्पन्न संदेशों को प्रिंट करता है:
RSI JUnit यह व्यू, सूट क्लास के अंतर्गत समूहीकृत तीन सफल परीक्षण विधियों के समान रन को रिकॉर्ड करता है:
नोट: इस उदाहरण में कंसोल लेबल एक दूसरे के ऊपर हैं — SuiteTest1 द्वारा प्रिंट की गई स्ट्रिंग "Suite Test 2" है और SuiteTest2 द्वारा प्रिंट की गई स्ट्रिंग "Suite Test 1" है। मूल सूचियाँ अपरिवर्तित रूप से पुन: प्रस्तुत की गई हैं, इसलिए लेबल वैसे ही हैं जैसे लेखक ने लिखे थे; कक्षा का नाम पढ़ें। JUnit आउटपुट को स्रोत से मिलाते समय मुद्रित लेबल के बजाय दृश्य का उपयोग करें।
टेस्ट सूट कैसे बनाएं JUnit 5
JUnit 5 रनर्स को पूरी तरह से हटा देता है, इसलिए @RunWith(Suite.class) org.junit.jupiter पैकेज में मौजूद नहीं है। सूट्स को स्थानांतरित कर दिया गया है। JUnit प्लेटफ़ॉर्म, जो उन्हें एक अलग वस्तु में भेजता है जिसे कहा जाता है junit-प्लेटफ़ॉर्म-सूट-इंजनउस डिपेंडेंसी को जोड़ें, फिर एक क्लास को @Suite और सेलेक्टर एनोटेशन में से किसी एक के साथ एनोटेट करें।
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
चयनकर्ता एनोटेशन एकल @SuiteClasses सूची को विकल्पों के एक छोटे समूह से प्रतिस्थापित करते हैं:
| टिप्पणी | यह क्या चुनता है |
| @SelectClasses | व्यक्तिगत परीक्षण वर्ग जिन्हें एक-एक करके नाम दिया जाता है, जो @SuiteClasses का सीधा प्रतिस्थापन है। |
| @SelectPackages | नामित पैकेज और उसके सभी उप-पैकेजों में मौजूद प्रत्येक परीक्षण वर्ग। |
| @IncludeClassNamePatterns | चयनित भाग के ऊपर एक नियमित अभिव्यक्ति फ़िल्टर लागू किया गया है। |
| @SuiteDisplayName | रिपोर्ट में क्लास के नाम के स्थान पर एक पठनीय नाम दिखाया जाएगा। |
व्यवहार में दो और अंतर महत्वपूर्ण हैं। JUnit 5 सूट क्लास @BeforeSuite और @AfterSuite विधियों को घोषित कर सकती है, जो पूरे सूट में एक बार चलती हैं, और JUnit ऊपर दिया गया उदाहरण 4 अभी भी निष्पादित होता है JUnit यह प्लेटफॉर्म पुराने इंजन के माध्यम से काम करता है, इसलिए इसे चालू रखने के लिए इस पृष्ठ पर मौजूद मूल कोड को दोबारा लिखने की आवश्यकता नहीं है।
लाभ और सीमाएँ JUnit टेस्ट सूट
एक सुइट एक समूह हैping तंत्र, न कि परीक्षण ढांचा इसकी अपनी विशेषताएं हैं, और यही बात इसे निर्धारित करती है कि यह किन कार्यों में अच्छा है और किन क्षेत्रों में यह उपयोगी नहीं रह जाता है।
फायदे
- एक लॉन्च संबंधित कक्षाओं को एक साथ चलाता है, इसलिए एक स्मोक सेट या एक प्रतीपगमन सेट कमांड एक ही कमांड से शुरू होता है।
- परिणाम दृश्य प्रत्येक वर्ग को एक ही सूट नोड के अंतर्गत समूहित करता है, जिससे साझा विफलता का पता लगाना आसान हो जाता है।
- सदस्यता सूची कोड में मौजूद होती है, इसलिए इसकी समीक्षा और संस्करण किसी अन्य स्रोत फ़ाइल की तरह ही किया जाता है।
- एक ही सूट क्लास को IDE से, या किसी रनर से लॉन्च किया जा सकता है। JUnitकोर से, या किसी बिल्ड टूल से।
सीमाओं
- @SuiteClasses एक हार्ड-कोडेड सूची है, इसलिए जब तक कोई व्यक्ति सूट को संपादित नहीं करता, तब तक एक नई परीक्षण क्लास को चुपचाप छोड़ दिया जाता है।
- यह सुइट कक्षाओं की सूची में दिए गए क्रम के अलावा किसी भी प्रकार की क्रम-निर्धारण गारंटी नहीं देता है।
- सदस्य वर्गों के बीच कुछ भी साझा नहीं किया जाता है, इसलिए एक सुइट फिक्स्चर या बेस क्लास का विकल्प नहीं है।
- बिल्ड टूल्स पहले से ही नामकरण परंपरा के आधार पर टेस्ट क्लास का पता लगा लेते हैं, जिससे कई परियोजनाओं में एक सूट की आवश्यकता नहीं रह जाती है।
बनाते समय होने वाली सामान्य त्रुटियाँ JUnit परीक्षण सूट
अधिकांश सूट संबंधी समस्याओं के लिए एक संक्षिप्त, अनुपयोगी संदेश दिया जाता है। तालिका में संभावित संदेशों, उनके कारणों और समाधानों की जानकारी दी गई है।
| संदेश या लक्षण | कारण | फिक्स |
| आरंभीकरण त्रुटि: कोई चलाने योग्य विधियाँ नहीं हैं | यह क्लास एक सामान्य टेस्ट क्लास की तरह चलती है, लेकिन इसमें केवल एनोटेशन होते हैं। | @RunWith(Suite.class) जोड़ें ताकि डिफ़ॉल्ट रनर के बजाय सूट रनर कार्यभार संभाल ले। |
| प्रतीक नहीं मिल सका: क्लास Suite | सूट का आयात अनुपस्थित है। | Import org.junit.runners.Suite alongside org.junit.runner.RunWith. |
| सूट चलता है, लेकिन एक क्लास छूट जाती है। | इस क्लास को कभी भी @SuiteClasses सूची में नहीं जोड़ा गया था। | क्लास को स्पष्ट रूप से जोड़ें, या इसे @SelectPackages में ले जाएं। JUnit 5. |
| कंपाइलर द्वारा क्लास का नाम स्वीकार नहीं किया जाता है। | @Runwith या @suiteClasses को गलत केसिंग के साथ टाइप किया गया था। | Java एनोटेशन केस-सेंसिटिव होते हैं: @RunWith और @SuiteClasses को बिल्कुल वैसे ही लिखें। |
| सूट क्लास में मौजूद टेस्ट कभी नहीं चलते। | सूट होल्डर में एक @Test विधि जोड़ी गई। | होल्डर को खाली रखें और टेस्ट मेथड को एक मेंबर क्लास में ले जाएं। |
एक बार पूरा लेख लिखें और उसे रखें।ping सटीक होना ही असली काम है। यदि सूची डिस्क पर मौजूद कक्षाओं से दूर चली जाती है, तो सूट हरे रंग की रिपोर्ट करता है जबकि उसका एक हिस्सा अध्याय परीक्षा सेट कभी निष्पादित ही नहीं होता, जो विफलता के सबसे शांत तरीकों में से एक है। सॉफ्टवेयर परिक्षण.







