JUnit उदाहरण के साथ एनोटेशन ट्यूटोरियल: @Test और @After क्या है
⚡ स्मार्ट सारांश
JUnit एनोटेशन वाक्यविन्यास संबंधी मेटाडेटा का एक रूप है जिसे जोड़ा जाता है Java सोर्स कोड इसलिए दिया जाता है ताकि टेस्ट रनर को पता चल सके कि किन तरीकों को निष्पादित करना है, उन्हें कब चलाना है और प्रत्येक में कितना समय लग सकता है।

एचएमबी क्या है? JUnit एनोटेशन?
JUnit एनोटेशन ये वाक्यविन्यास संबंधी मेटा-डेटा का एक विशेष रूप हैं जिन्हें जोड़ा जा सकता है। Java बेहतर कोड पठनीयता और संरचना के लिए स्रोत कोड। चर, पैरामीटर, पैकेज, विधियाँ और वर्ग एनोटेट किए जा सकते हैं। एनोटेशन को इसमें पेश किया गया था। JUnit 4, जिससे बनता है Java कोड को अधिक पठनीय और सरल बनाएं। यही बड़ा अंतर है। JUnit 3 और JUnit 4: JUnit 4 एनोटेशन आधारित है।
इन एनोटेशन की व्यावहारिक जानकारी होने पर, कोई भी आसानी से सीख सकता है और इसे लागू कर सकता है। JUnit परीक्षण। नीचे महत्वपूर्ण और अक्सर इस्तेमाल किया जाता है JUnit एनोटेशन सूची, के साथ JUnit प्रत्येक के आगे 5 (बृहस्पति) के समतुल्य चिह्न अंकित करें:
| क्रमांक | एनोटेशन | विवरण | JUnit 5 समतुल्य |
|---|---|---|---|
| 1. | @परीक्षा | यह एनोटेशन junit.framework.TestCase का प्रतिस्थापन है, और यह इंगित करता है कि जिस सार्वजनिक शून्य विधि से यह जुड़ा है उसे एक परीक्षण मामले के रूप में निष्पादित किया जा सकता है। | @टेस्ट (org.junit.jupiter.api) |
| 2. | @पहले | इस एनोटेशन का उपयोग तब किया जाता है जब आप प्रत्येक परीक्षण मामले से पहले कुछ कथन, जैसे पूर्व शर्त, निष्पादित करना चाहते हैं। | @BeforeEach |
| 3. | @कक्षा से पहले | इस एनोटेशन का उपयोग तब किया जाता है जब आप सभी टेस्ट केस से पहले कुछ स्टेटमेंट को निष्पादित करना चाहते हैं, उदाहरण के लिए एक टेस्ट कनेक्शन जिसे सभी टेस्ट केस से पहले खोला जाना चाहिए। | @BeforeAll |
| 4. | @बाद | यदि आप प्रत्येक कथन के बाद कुछ कथन निष्पादित करना चाहते हैं तो इस एनोटेशन का उपयोग किया जा सकता है परीक्षण का मामलाउदाहरण के लिए, वैरिएबल को रीसेट करना या अस्थायी फ़ाइलों को हटाना। | @प्रत्येक के बाद |
| 5. | @कक्षा के बाद | इस एनोटेशन का उपयोग तब किया जा सकता है जब आप सभी टेस्ट केसों के बाद कुछ स्टेटमेंट को निष्पादित करना चाहते हैं, उदाहरण के लिए सभी टेस्ट केसों को निष्पादित करने के बाद संसाधनों को रिलीज़ करना। | @आफ्टरऑल |
| 6. | @अनदेखा करना | इस एनोटेशन का उपयोग तब किया जा सकता है जब आप परीक्षण निष्पादन के दौरान कुछ कथनों को अनदेखा करना चाहते हैं, उदाहरण के लिए परीक्षण निष्पादन के दौरान कुछ परीक्षण मामलों को अक्षम करना। | @अक्षम |
| 7. | @टेस्ट(समय समाप्त=500) | इस एनोटेशन का उपयोग तब किया जा सकता है जब आप परीक्षण निष्पादन के दौरान कुछ समय सीमा निर्धारित करना चाहते हैं, उदाहरण के लिए यदि आप किसी एसएलए (सेवा स्तर समझौते) के तहत काम कर रहे हैं और परीक्षणों को एक निर्दिष्ट समय के भीतर पूरा करने की आवश्यकता है। | @Timeout या assertTimeout |
| 8. | @Test(अपेक्षित=IllegalArgumentException.class) | इस एनोटेशन का उपयोग तब किया जा सकता है जब आप परीक्षण निष्पादन के दौरान किसी अपवाद को संभालना चाहते हों। उदाहरण के लिए, यदि आप यह जांचना चाहते हैं कि कोई विशेष विधि निर्दिष्ट अपवाद उत्पन्न कर रही है या नहीं। | assertThrows |
JUnit एनोटेशन उदाहरण
आइए एक क्लास बनाएं जिसमें महत्वपूर्ण विषयों को शामिल किया जाए JUnit सरल प्रिंट स्टेटमेंट के साथ एनोटेशन बनाएं और इसे टेस्ट रनर क्लास के साथ निष्पादित करें:
चरण 1) नीचे दिए गए बिंदुओं पर विचार करें Java वह क्लास जिसमें विभिन्न विधियाँ हैं जो ऊपर सूचीबद्ध एनोटेशन से जुड़ी हैं:
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 और @BeforeClass में JUnit [ m2() और m1() विधियाँ ] क्रमशः प्रत्येक टेस्ट केस से पहले और सभी टेस्ट केस से पहले निष्पादित की जाएंगी।
- इसी तरह @After और @AfterClass में JUnit (m4() और m3() विधियाँ) क्रमशः प्रत्येक टेस्ट केस के बाद और सभी टेस्ट केसों के बाद निष्पादित की जाएंगी। @Ignore (m6() विधि) को टेस्ट को अनदेखा करने के रूप में माना जाएगा।
आइए ऊपर दिए गए उदाहरणों में उपयोग किए गए टेस्ट केसों का विश्लेषण करें। Java कक्षा का विस्तृत विवरण:
- नीचे दिए गए अनुसार m5() विधि पर विचार करें:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
उपरोक्त विधि में, आप वेरिएबल "list" में एक स्ट्रिंग जोड़ रहे हैं:
- सूची.खाली है() झूठा परिणाम लौटेगा.
- दावाअसत्य(सूची.खाली है()) सत्य लौटना चाहिए.
- परिणामस्वरूप, परीक्षण मामला पास.
क्योंकि आपने सूची में केवल एक स्ट्रिंग जोड़ी है, इसलिए आकार एक है।
- सूची.आकार() इसे पूर्णांक मान "1" लौटाना चाहिए।
- So assertEquals(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) इसका उपयोग टेस्ट केस में टाइमआउट लागू करने के लिए किया जाता है। मान मिलीसेकंड में है, इसलिए m7() को 10 मिलीसेकंड के भीतर पूरा होना चाहिए।
- नीचे दिए गए अनुसार m8() विधि पर विचार करें:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
जैसा कि ऊपर चर्चा की गई है, @टेस्ट(अपेक्षित) यह विधि निष्पादन के दौरान निर्दिष्ट अपवाद की जाँच करेगी, इसलिए विधि m8() "No Such Method Exception" उत्पन्न करेगी। परिणामस्वरूप, परीक्षण एक अपवाद के साथ निष्पादित होगा।
सटीकता संबंधी टिप्पणी: m8() केवल एक पंक्ति प्रिंट करता है, इसलिए घोषित अपवाद वास्तव में कभी फेंका नहीं जाता है और JUnit 4. रिपोर्ट में परीक्षण को असफल बताया गया है। अपेक्षित प्रकार को उस प्रकार से मिलाएँ जो विधि वास्तव में त्रुटि उत्पन्न करती है। JUnit 5 इसे लिखता है assertThrows.
चूंकि सभी परीक्षण मामले पास हो जाते हैं, इसलिए इसका परिणाम सफल परीक्षण निष्पादन होता है।
वास्तविक परिणाम
उपरोक्त उदाहरण में तीन टेस्ट केस हैं, इसलिए सभी टेस्ट केस एक-एक करके निष्पादित किए जाएंगे। नीचे कंसोल का स्क्रीनशॉट देखें:

नीचे प्रिंट स्टेटमेंट देखें जिन्हें कंसोल पर देखा जा सकता है:
@BeforeClass का उपयोग करके, सभी परीक्षण मामलों से पहले निष्पादित किया गया
@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है
@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है
@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है
@Test(timeout) का उपयोग करके, इसका उपयोग टाइमआउट लागू करने के लिए किया जा सकता है JUnit4 परीक्षण मामला
@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है
@Before एनोटेशन का उपयोग करके, प्रत्येक परीक्षण मामले से पहले निष्पादित किया जाता है
@Test(expected) का उपयोग करके, यह निष्पादन के दौरान निर्दिष्ट अपवाद की जांच करेगा
@After का उपयोग करके, प्रत्येक परीक्षण मामले के बाद निष्पादित किया जाता है
@AfterClass का उपयोग करके, सभी परीक्षण मामलों के बाद निष्पादित किया गया
JUnit दावा वर्ग
एनोटेशन यह तय करते हैं कि कोई मेथड कब चलेगी; एसेट मेथड यह तय करते हैं कि वह सफल होगी या नहीं।
यह क्लास टेस्ट केस लिखने में उपयोगी कई असर्शन मेथड प्रदान करती है। यदि सभी असर्शन स्टेटमेंट पास हो जाते हैं, तो टेस्ट परिणाम सफल होते हैं। यदि कोई भी असर्शन स्टेटमेंट विफल हो जाता है, तो टेस्ट परिणाम असफल होते हैं। समर्पित JUnit जोर इस ट्यूटोरियल में प्रत्येक विधि को विस्तार से समझाया गया है।
जैसा कि आपने पहले देखा है, नीचे दी गई तालिका में महत्वपूर्ण Assert विधियों और उनके विवरण का वर्णन किया गया है:
| क्रमांक | विधि | विवरण |
|---|---|---|
| 1. | शून्य assertEquals(बूलियन अपेक्षित, बूलियन वास्तविक) | यह जांच करता है कि क्या दो मान बराबर हैं, ठीक उसी तरह जैसे ऑब्जेक्ट क्लास का इक्वल्स मेथड काम करता है। |
| 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 क्लास उपलब्ध है। junit.framework पैकेज। @Test एनोटेशन बताता है JUnit कि यह सार्वजनिक शून्य विधि (यहाँ एक परीक्षण मामला) जिससे यह जुड़ी हुई है, एक परीक्षण मामले के रूप में चलाई जा सकती है।
संस्करण नोट: परीक्षण का मामला, परीक्षा परिणाम और परीक्षण सूट विरासत से संबंधित junit.framework से पैकेज JUnit 3. वे अभी भी junit 4.x आर्टिफैक्ट के अंदर शिप करते हैं, लेकिन एनोटेशन-आधारित परीक्षण TestCase का विस्तार नहीं करते हैं।
नीचे दी गई तालिका में उपलब्ध कुछ महत्वपूर्ण विधियों को दर्शाया गया है। junit.framework.TestCase वर्ग:
| क्रमांक | विधि | विवरण |
|---|---|---|
| 1. | int गिनतीटेस्टकेस() | इस विधि का उपयोग यह गिनने के लिए किया जाता है कि कितने टेस्ट केस निष्पादित किए गए हैं। रन(टेस्ट रिजल्ट tr) विधि. |
| 2. | टेस्ट रिजल्ट createResult() | इस विधि का उपयोग एक बनाने के लिए किया जाता है परीक्षा परिणाम वस्तु। |
| 3. | स्ट्रिंग getName() | यह विधि एक स्ट्रिंग लौटाती है जो कुछ और नहीं बल्कि एक है परीक्षण का मामला नाम. |
| 4. | टेस्ट रिजल्ट रन() | इस विधि का उपयोग परीक्षण निष्पादित करने के लिए किया जाता है, जो एक परिणाम लौटाता है। परीक्षा परिणाम वस्तु। |
| 5. | शून्य रन (TestResult परिणाम) | इस विधि का उपयोग एक परीक्षण को निष्पादित करने के लिए किया जाता है परीक्षा परिणाम एक ऐसी वस्तु, जो कुछ भी लौटाती नहीं है। |
| 6. | void setName(स्ट्रिंग नाम) | इस विधि का उपयोग किसी वस्तु का नाम निर्धारित करने के लिए किया जाता है। परीक्षण मामला। |
| 7. | शून्य सेटअप() | इस विधि का उपयोग रिसोर्स एसोसिएशन कोड लिखने के लिए किया जाता है, उदाहरण के लिए डेटाबेस कनेक्शन बनाना। |
| 8. | शून्य टियरडाउन() | इस विधि का उपयोग संसाधन रिलीज कोड लिखने के लिए किया जाता है, उदाहरण के लिए लेनदेन संचालन करने के बाद डेटाबेस कनेक्शन को रिलीज करना। |
JUnit टेस्टरिजल्ट क्लास
जब आप कोई परीक्षण निष्पादित करते हैं, तो यह एक परिणाम (एक प्रारूप में) लौटाता है। परीक्षा परिणाम इस टेस्ट रिजल्ट ऑब्जेक्ट का उपयोग परिणामी ऑब्जेक्ट का विश्लेषण करने के लिए किया जा सकता है। यह टेस्ट रिजल्ट या तो असफल हो सकता है या सफल।
junit.framework.TestResult क्लास में उपयोग किए जाने वाले महत्वपूर्ण तरीकों के लिए नीचे दी गई तालिका देखें:
| क्रमांक | विधि | विवरण |
|---|---|---|
| 1. | void addError(टेस्ट टेस्ट, Throwable t) | इस विधि का उपयोग तब किया जाता है जब आपको परीक्षण में कोई त्रुटि जोड़नी हो। |
| 2. | शून्य addFailure(टेस्ट परीक्षण, AssertionFailedError टी) | इस विधि का उपयोग तब किया जाता है जब आपको विफलताओं की सूची में कोई विफलता जोड़नी हो। |
| 3. | शून्य endTest(टेस्ट परीक्षण) | इस विधि का उपयोग यह सूचित करने के लिए किया जाता है कि कोई परीक्षण किया गया है (पूर्ण हो गया है)। |
| 4. | int त्रुटि गणना() | इस विधि का उपयोग परीक्षण निष्पादन के दौरान पता लगाए गए त्रुटियों को प्राप्त करने के लिए किया जाता है। |
| 5. | गणना त्रुटियाँ() | यह विधि केवल त्रुटियों का एक संग्रह (यहाँ एक एन्यूमरेशन) लौटाती है। |
| 6. | int विफलता गणना() | इस विधि का उपयोग परीक्षण निष्पादन के दौरान पता चली विफलताओं की संख्या प्राप्त करने के लिए किया जाता है। |
| 7. | शून्य रन (टेस्टकेस परीक्षण) | इस विधि का उपयोग परीक्षण मामले को निष्पादित करने के लिए किया जाता है। |
| 8. | int रनकाउंट() | यह विधि केवल निष्पादित परीक्षणों की गणना करती है। |
| 9. | शून्य प्रारंभ टेस्ट (टेस्ट परीक्षण) | इस विधि का उपयोग यह सूचित करने के लिए किया जाता है कि परीक्षण शुरू हो गया है। |
| 10. | शून्य रोक() | इस विधि का उपयोग टेस्ट रन को रोकने के लिए किया जाता है। |
JUnit टेस्ट सूट क्लास
यदि आप एक निर्दिष्ट क्रम में कई परीक्षण निष्पादित करना चाहते हैं, तो सभी परीक्षणों को एक ही स्थान पर संयोजित करके ऐसा किया जा सकता है। इस स्थान को टेस्ट सूट कहा जाता है, और JUnit परीक्षण सूट यह ट्यूटोरियल एक पूर्ण उदाहरण के माध्यम से जानकारी प्रदान करता है।
नीचे दी गई तालिका में उपयोग की जाने वाली महत्वपूर्ण विधियों को देखें। junit.framework.TestSuite वर्ग:
| क्रमांक | विधि | विवरण |
|---|---|---|
| 1. | शून्य addTest(टेस्ट परीक्षण) | यदि आप सूट में कोई परीक्षण जोड़ना चाहते हैं तो इस विधि का उपयोग किया जाता है। |
| 2. | शून्य addTestSuite(क्लास टेस्टक्लास) | यदि आप सूट में परीक्षण जोड़ते समय क्लास निर्दिष्ट करना चाहते हैं तो इस विधि का उपयोग किया जाता है। |
| 3. | int गिनतीटेस्टकेस() | यदि आप परीक्षण मामलों की संख्या गिनना चाहते हैं तो इस विधि का उपयोग किया जाता है। |
| 4. | स्ट्रिंग getName() | इस विधि का उपयोग परीक्षण सूट का नाम प्राप्त करने के लिए किया जाता है। |
| 5. | शून्य रन (TestResult परिणाम) | इस विधि का उपयोग परीक्षण निष्पादित करने और परीक्षण परिणाम को एकत्रित करने के लिए किया जाता है। परीक्षा परिणाम वस्तु। |
| 6. | void setName(स्ट्रिंग नाम) | इस विधि का उपयोग नाम निर्धारित करने के लिए किया जाता है। परीक्षण सूट. |
| 7. | टेस्ट testAt(int index) | इस विधि का उपयोग तब किया जाता है जब आप किसी दिए गए इंडेक्स पर टेस्ट वापस करना चाहते हैं। |
| 8. | int टेस्टकाउंट() | इस विधि का उपयोग तब किया जाता है जब आप टेस्ट सूट में मौजूद टेस्टों की संख्या वापस प्राप्त करना चाहते हैं। |
| 9. | स्थैतिक परीक्षण चेतावनी(स्ट्रिंग संदेश) | यह विधि एक परीक्षण लौटाती है जो असफल हो जाएगा और एक चेतावनी संदेश लॉग करेगा। |
