4.1 @विकलांग

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

जैसा कि मैंने पहले लिखा था, 99% परीक्षण किसी के द्वारा समर्थित नहीं हैं, इसलिए वे सभी जल्द या बाद में अक्षम हो जाते हैं। इसलिए, यह एनोटेशन उपयोगी लोगों की सूची में पहला है।

उसके उदाहरण पर विचार करें:

public class AppTest {

    @Disabled("Test is temporarily disabled. True, true")
    @Test
    void testOnDev(){
        System.setProperty("ENV", "DEV");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }

    @Test
    void testOnProd(){
     System.setProperty("ENV", "PROD");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }
}

उपरोक्त उदाहरण में, विधि को testOnDev()नहीं कहा जाएगा। वैसे, @Disabledवर्ग घोषणा से ठीक पहले एनोटेशन लिखा जा सकता है, फिर इसके सभी तरीकों को नजरअंदाज कर दिया जाएगा।

@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
    @Test
    void testOnDev(){
        System.setProperty("ENV", "DEV");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }

    @Test
    void testOnProd(){
     System.setProperty("ENV", "PROD");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }
}

4.2 @ नेस्टेड

JUnit आपको नेस्टेड कक्षाओं में परीक्षण विधियों को कॉल करने की अनुमति देता है। मेरा मतलब नेस्टेड टेस्ट क्लासेस है। यह एक तथ्य नहीं है कि आप अक्सर उनसे मिलेंगे, लेकिन ऐसी संभावना है, इसलिए आपको यह समझने की जरूरत है कि यह क्या है।

इसकी घोषणा से पहले एक नेस्टेड वर्ग के तरीकों को कॉल करने के लिए, आपको एक एनोटेशन लिखना होगा @Nested। उदाहरण:

public class AppTest {
    @Nested
    public class DevStagingEnvironment {
    @Test
        void testOnDev(){
            System.setProperty("ENV", "DEV");
            Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
        }
   }

    @Nested
    public class ProductionEnvironment {
        @Test
        void testOnProd(){
           System.setProperty("ENV", "PROD");
           Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
        }
   }
}

अधिक विवरण आधिकारिक दस्तावेज में पाया जा सकता है ।

4.3 @ExtendWith

एक और उपयोगी एनोटेशन है @ExtendWith। सबसे अधिक संभावना है कि आप उससे बहुत बार मिलेंगे, तो आइए उसे और विस्तार से देखें।

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

यदि आपका कोड एक फ्रेमवर्क (उदाहरण के लिए, स्प्रिंग) के अंदर चल रहा है, तो लगभग हमेशा यह फ्रेमवर्क आपके कोड में वस्तुओं के निर्माण और विन्यास का प्रबंधन करता है । इसलिए, एक विशेष परीक्षण प्लगइन अपरिहार्य है। उदाहरण:

उदाहरण 1. सही ढंग से काम करने के लिए एक्सटेंशन WebServerExtensionको टेस्ट मेथड कहा जाता है ।URL

@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
    WebClient webClient = new WebClient();
    // Use WebClient to connect to web server using serverUrl and verify response
    assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}

इस प्रकार परीक्षण आमतौर पर स्प्रिंग ढांचे के साथ काम करने वाले कोड का परीक्षण करना शुरू करते हैं:

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {

    @MockBean
    TestService service;

    @Test
    void test() {
        assertNotNull(service); // Test succeeds
    }
}

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

4.4 @ टाइमआउट

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

class TimeoutDemo {
    @Test
    @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    void failsIfExecutionTimeExceeds100Milliseconds() {
        // test will fail if it takes more than 100 milliseconds
    }
}

यह हमारे व्याख्यान का समापन करता है।