Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

JUnit 5 एनोटेशन में महारत: व्यावहारिक उदाहरण और सेटअप गाइड

JUnit 5 JUnit की अगली पीढ़ी है। लक्ष्य JVM पर डेवलपर-साइड टेस्टिंग के लिए एक अप-टू-डेट फाउंडेशन बनाना है। इसमें Java 8 और उससे ऊपर पर ध्यान केंद्रित करना, साथ ही टेस्टिंग की कई अलग-अलग शैलियों को सक्षम करना शामिल है।

आप Maven और Gradle दोनों का उपयोग कर सकते हैं।

यदि आप Maven का उपयोग कर रहे हैं, तो आपको अपने pom.xml फ़ाइल में निम्न निर्भरता जोड़ने की आवश्यकता है:

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>5.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

JUnit 5 एनोटेशन

आप देखेंगे कि JUnit 5 में, सबसे स्पष्ट परिवर्तनों में से एक यह है कि टेस्ट क्लासेस और मेथड्स को अब पब्लिक होने की आवश्यकता नहीं है।

अब, आइए सबसे आम JUnit 5 एनोटेशन की सूची देखें।

@Test

यह एनोटेशन दर्शाता है कि एक मेथड एक टेस्ट मेथड है। ध्यान दें कि यह एनोटेशन कोई एट्रिब्यूट नहीं लेता है।

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class JUnit5Test {
    @Test
    void helloJUnit5() {
        assertEquals(10, 5+5);
    }
}

@ParameterizedTest

पैरामीटराइज़्ड टेस्ट एक टेस्ट को अलग-अलग आर्गुमेंट्स के साथ कई बार चलाना संभव बनाते हैं। उन्हें नियमित @Test मेथड्स की तरह ही घोषित किया जाता है लेकिन @ParameterizedTest एनोटेशन का उपयोग करते हैं।

इसके अलावा, आपको कम से कम एक स्रोत घोषित करना होगा जो प्रत्येक इनवोकेशन के लिए आर्गुमेंट्स प्रदान करेगा और फिर टेस्ट मेथड में आर्गुमेंट्स का उपयोग करेगा।

उदाहरण के लिए, निम्न उदाहरण एक पैरामीटराइज़्ड टेस्ट को दर्शाता है जो आर्गुमेंट्स के स्रोत के रूप में एक String Array निर्दिष्ट करने के लिए @ValueSource एनोटेशन का उपयोग करता है।

उदाहरण:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;

class JUnit5Test {
    @ParameterizedTest
    @ValueSource(strings = { "cali", "bali", "dani" })
    void endsWithI(String str) {
        assertTrue(str.endsWith("i"));
    }
}

@RepeatedTest

JUnit 5 में एक टेस्ट को निर्दिष्ट संख्या में दोहराने की क्षमता है, बस एक मेथड को @RepeatedTest से एनोटेट करके और वांछित कुल दोहराव की संख्या निर्दिष्ट करके।

एक दोहराए गए टेस्ट का प्रत्येक इनवोकेशन नियमित @Test मेथड के निष्पादन की तरह व्यवहार करता है।

यह Selenium के साथ UI टेस्टिंग में विशेष रूप से उपयोगी है।

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.TestInfo;
import static org.junit.jupiter.api.Assertions.assertEquals;

class JUnit5Test {
    @RepeatedTest(value = 5, name = "{displayName} {currentRepetition}/{totalRepetitions}")
    @DisplayName("RepeatingTest")
    void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
        int i = 3;
        System.out.println(testInfo.getDisplayName() + "-->" + repInfo.getCurrentRepetition());
        assertEquals(repInfo.getCurrentRepetition(), i);
    }
}

JUnit 5 एनोटेशन में महारत: व्यावहारिक उदाहरण और सेटअप गाइड

जैसा कि आप टेस्ट के परिणाम से देख सकते हैं, जब i==3, टेस्ट पास होता है, अन्यथा यह फेल होता है।

@DisplayName

टेस्ट क्लासेस और टेस्ट मेथड्स कस्टम डिस्प्ले नाम घोषित कर सकते हैं जो टेस्ट रनर्स और टेस्ट रिपोर्ट्स द्वारा प्रदर्शित किए जाएंगे।

उदाहरण:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;

@DisplayName("DisplayName Demo")
class JUnit5Test {
    @Test
    @DisplayName("Custom test name")
    void testWithDisplayName() {
    }

    @Test
    @DisplayName("Print test name")
    void printDisplayName(TestInfo testInfo) {
        System.out.println(testInfo.getDisplayName());
    }
}

@BeforeEach

@BeforeEach एनोटेशन दर्शाता है कि एनोटेटेड मेथड को प्रत्येक टेस्ट मेथड से पहले निष्पादित किया जाना चाहिए, JUnit 4 के @Before के समान।

उदाहरण:

import org.junit.jupiter.api.*;

class JUnit5Test {
    @BeforeEach
    void init(TestInfo testInfo) {
        String callingTest = testInfo.getTestMethod().get().getName();
        System.out.println(callingTest);
    }

    @Test
    void firstTest() {
        System.out.println(1);
    }

    @Test
    void secondTest() {
        System.out.println(2);
    }
}

आउटपुट:

firstTest
1
secondTest
2

@AfterEach

यह एनोटेशन दर्शाता है कि एनोटेटेड मेथड को प्रत्येक टेस्ट मेथड के बाद निष्पादित किया जाना चाहिए, JUnit 4 के @After के समान। उदाहरण के लिए, यदि टेस्ट को प्रत्येक टेस्ट के बाद किसी प्रॉपर्टी को रीसेट करने की आवश्यकता है, तो हम उस कार्य के लिए एक मेथड को @AfterEach से एनोटेट कर सकते हैं।

import org.junit.jupiter.api.*;

class JUnit5Test {
    @Test
    void firstTest() {
        System.out.println(1);
    }

    @Test
    void secondTest() {
        System.out.println(2);
    }

    @AfterEach
    void after(TestInfo testInfo) {
        String callingTest = testInfo.getTestMethod().get().getName();
        System.out.println(callingTest);
    }
}

आउटपुट:

1
firstTest
2
secondTest

@BeforeAll

यह एनोटेशन सभी टेस्ट से पहले एक मेथड को निष्पादित करता है। यह JUnit 4 के @BeforeClass के समान है। @BeforeAll एनोटेशन का उपयोग आमतौर पर टेस्ट के लिए विभिन्न चीजों को इनिशियलाइज़ करने के लिए किया जाता है।

उदाहरण:

import org.junit.jupiter.api.*;

class JUnit5Test {
    @BeforeAll
    static void init() {
        System.out.println("Only run once before all tests");
    }

    @Test
    void firstTest() {
        System.out.println(1);
    }

    @Test
    void secondTest() {
        System.out.println(2);
    }
}

आउटपुट:

Only run once before all tests
1
2

@AfterAll

@AfterAll एनोटेशन का उपयोग सभी टेस्ट निष्पादित होने के बाद ही एनोटेटेड मेथड को निष्पादित करने के लिए किया जाता है। यह JUnit 4 के @AfterClass के समान है। हम इस एनोटेशन का उपयोग सभी टेस्ट के अंत में प्रोसेस को समाप्त करने या टियर डाउन करने के लिए करते हैं।

उदाहरण:

import org.junit.jupiter.api.*;

class JUnit5Test {
    @Test
    void firstTest() {
        System.out.println(1);
    }

    @Test
    void secondTest() {
        System.out.println(2);
    }

    @AfterAll
    static void after() {
        System.out.println("Only run once after all tests");
    }
}

आउटपुट:

1
2
Only run once after all tests

@Tag

हम इस एनोटेशन का उपयोग क्लास या मेथड लेवल पर टेस्ट को फ़िल्टर करने के लिए टैग घोषित करने के लिए कर सकते हैं।

@Tag एनोटेशन तब उपयोगी होता है जब हम चुने हुए टेस्ट के साथ एक टेस्ट पैक बनाना चाहते हैं।

उदाहरण:

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("smoke")
class JUnit5Test {
    @Test
    @Tag("login")
    void validLoginTest() {
    }

    @Test
    @Tag("search")
    void searchTest() {
    }
}

@Disabled

@Disabled एनोटेशन का उपयोग क्लास या मेथड लेवल पर टेस्ट को अक्षम या स्किप करने के लिए किया जाता है। यह JUnit 4 के @Ignore के समान है।

क्लास लेवल पर घोषित होने पर, सभी @test मेथड्स स्किप हो जाते हैं। जब हम मेथड लेवल पर @Disabled का उपयोग करते हैं, तो केवल एनोटेटेड मेथड अक्षम होता है।

उदाहरण:

@Disabled का उपयोग टेस्ट क्लास को अक्षम करने के लिए:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

@Disabled
class DisabledClassDemo {
    @Test
    void testWillBeSkipped() {
    }
}

उदाहरण:

@Disabled एनोटेशन का उपयोग टेस्ट मेथड को अक्षम करने के लिए:

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

class DisabledTestsDemo {
    @Disabled
    @Test
    void testWillBeSkipped() {
    }

    @Test
    void testWillBeExecuted() {
    }
}
  1. उदाहरणों के साथ Linux FIND कमांड उदाहरणों के साथ Linux FIND कमांड

    क्या आप जानते हैं कि Linux की नई इंस्टॉलेशन में कितनी फ़ाइलें होती हैं? यदि आप PopOS! Linux डिस्ट्रीब्यूशन को उदाहरण के रूप में उपयोग करते हैं, तो 31,000 से अधिक फ़ाइलें हैं। यह आपके कोई डॉक्यूमेंट बनाने, संगीत संग्रहीत करने, PDF डाउनलोड करने, या तस्वीरें व्यवस्थित करने से पहले की बात है। इस वजह से

  1. - पायथन में timeit मॉड्यूल: उदाहरणों के साथ

    पायथन पायथन कोड के एक टुकड़े के निष्पादन समय को मापने के कई तरीके प्रदान करता है। एक तरीका पायथन के बिल्ट-इन time मॉड्यूल का उपयोग करना है और प्रोग्राम के निष्पादन से पहले और बाद का समय सेव करना है। पायथन timeit जब कोई प्रोग्राम चल रहा होता है, तो कई प्रक्रियाएं पृष्ठभूमि में भी चलती हैं जो उस कोड

  1. - Java ArrayList में महारत हासिल करें: आवश्यक मेथड्स और व्यावहारिक उदाहरण

    इस पोस्ट में हम प्रत्येक मेथड के कोड उदाहरणों के साथ सबसे आम Java ArrayList मेथड्स को कवर करते हैं। ArrayList क्लास एक रिसाइज़ेबल ऐरे है। हम आमतौर पर ArrayList का उपयोग तब करते हैं जब हमें पहले से लिस्ट का आकार नहीं पता होता। ArrayList क्लास java.util पैकेज में है। ArrayList कैसे बनाएं ArrayList बन