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);
}
}

जैसा कि आप टेस्ट के परिणाम से देख सकते हैं, जब 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() {
}
}