JUnit: यह क्या है, मुख्य अवधारणाएं और यह कैसे काम करता है

लेखक: IT Sectr प्रकाशित: 2026-04-08 पढ़ने का समय: 8 मिनट

JUnit Java और Kotlin इकोसिस्टम में यूनिट परीक्षण के लिए एक मानक फ्रेमवर्क है, जिसका उपयोग Android विकास में पृथक घटकों के स्तर पर व्यावसायिक तर्क की जांच के लिए किया जाता है। फ्रेमवर्क एनोटेशन, assertion विधियों और टेस्ट रनर का एक सेट प्रदान करता है जो स्वचालित रूप से परीक्षणों का पता लगाता और उन्हें निष्पादित करता है। JUnit.org के अनुसार, लाइब्रेरी JVM इकोसिस्टम में यूनिट परीक्षण के लिए सबसे लोकप्रिय समाधान बनी हुई है: 70% से अधिक Java प्रोजेक्ट किसी भी संस्करण में JUnit का उपयोग करते हैं।

मुख्य बिंदु

  • JUnit Java और Kotlin कोड के यूनिट परीक्षण के लिए एक ओपन-सोर्स फ्रेमवर्क है।
  • एनोटेशन — @Test, @BeforeEach, @BeforeAll परीक्षण वर्ग के जीवनचक्र का प्रबंधन करते हैं।
  • Assertions — assertEquals, assertTrue, assertThrows अपेक्षित निष्पादन परिणामों की जांच करते हैं।
  • पैरामीटराइज्ड टेस्ट — एक ही परीक्षण को इनपुट डेटा के विभिन्न सेटों के साथ चलाने की अनुमति देते हैं।
  • Test Runner — JUnit बुनियादी ढांचा स्वचालित रूप से प्रोजेक्ट में सभी परीक्षणों का पता लगाता और चलाता है।

JUnit क्या है?

JUnit Java और Kotlin में दोहराए जाने योग्य यूनिट टेस्ट लिखने और चलाने के लिए एक ओपन-सोर्स फ्रेमवर्क है। यह xUnit इकोसिस्टम का हिस्सा है — Kent Beck और Erich Gamma की आर्किटेक्चर पर आधारित फ्रेमवर्क का एक परिवार — और Android Studio और IntelliJ IDEA में मानक परीक्षण उपकरण है।

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

JUnit का पहला संस्करण 1997 में सामने आया और Test-Driven Development (TDD) प्रथाओं को लोकप्रिय बनाकर विकास दृष्टिकोण में मौलिक परिवर्तन लाया। आज, JUnit 5 (Jupiter) वर्तमान संस्करण है, जो Java 8+ और एक्सटेंशन का समर्थन करने वाली मॉड्यूलर आर्किटेक्चर के साथ पूरी तरह से पुनः डिज़ाइन किया गया है।

JUnit कैसे काम करता है

JUnit निष्पादन का तंत्र Test Runner पैटर्न पर आधारित है, जो classpath को स्कैन करता है, @Test एनोटेशन वाली विधियों को ढूँढता है, परीक्षण वर्ग का एक इंस्टेंस बनाता है और विधियों को एक विशिष्ट क्रम में चलाता है। Test Runner जीवनचक्र का प्रबंधन करता है: BeforeAll → BeforeEach → Test → AfterEach → AfterAll।

परीक्षण वर्ग का जीवनचक्र

JUnit प्रत्येक परीक्षण विधि को एक अलग वर्ग इंस्टेंस में लपेटता है, जो परीक्षणों के बीच पृथक्करण सुनिश्चित करता है। इसका मतलब है कि वर्ग के फ़ील्ड विभिन्न @Test विधियों के बीच स्थिति बनाए नहीं रखते — प्रत्येक परीक्षण एक साफ़ ऑब्जेक्ट से शुरू होता है।

परीक्षण की मूल संरचना

JUnit में सबसे सरल परीक्षण @Test एनोटेशन वाली एक विधि है जो परीक्षण के तहत कोड को कॉल करती है और assertion के माध्यम से परिणाम की जांच करती है। यदि assertion विफल होता है, तो परीक्षण विफल माना जाता है और JUnit त्रुटि की रिपोर्ट करता है।

java
@Test
void additionShouldReturnCorrectSum() {
    var calculator = new Calculator();
    var result = calculator.add(2, 3);
    assertEquals(5, result);
}

Test Runner स्वचालित रूप से ऐसी विधि ढूँढता है, उसे चलाता है और परिणाम की रिपोर्ट करता है। यदि विधि कोई अपवाद नहीं फेंकती — परीक्षण पास होता है (green). यदि कोई assertion विफल होता है — परीक्षण फेल होता है (red).

JUnit एनोटेशन: परीक्षण जीवनचक्र

JUnit में एनोटेशन यह निर्धारित करते हैं कि परीक्षण कोड कब और कैसे निष्पादित होना चाहिए। JUnit 5 में, एनोटेशन org.junit.jupiter.api पैकेज में स्थित हैं और सभी चरणों को कवर करते हैं: डेटा तैयारी, परीक्षण निष्पादन, संसाधन सफाई।

एनोटेशनउद्देश्यनिष्पादन
@Testपरीक्षण विधि को चिह्नित करता हैप्रति कॉल एक बार
@BeforeEachप्रत्येक परीक्षण से पहले सेटअपप्रत्येक @Test से पहले
@BeforeAllएक बार वर्ग आरंभीकरणसभी परीक्षणों से पहले एक बार
@AfterEachप्रत्येक परीक्षण के बाद सफाईप्रत्येक @Test के बाद
@AfterAllएक बार वर्ग समापनसभी परीक्षणों के बाद एक बार
@DisplayNameमानव-पठनीय परीक्षण नामसजावट

एनोटेशन के उपयोग का उदाहरण

एक उचित जीवनचक्र वाली पूर्ण परीक्षण वर्ग पर विचार करें। setUp विधि प्रत्येक परीक्षण से पहले Calculator का एक नया इंस्टेंस बनाती है, और tearDown संसाधनों को मुक्त करती है — उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर या डेटाबेस कनेक्शन बंद करना।

java
class CalculatorTest {

    private Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    void subtractionShouldReturnCorrectResult() {
        int result = calculator.subtract(10, 4);
        assertEquals(6, result);
    }

    @AfterEach
    void tearDown() {
        calculator.reset();
    }
}

Assertions: JUnit में परिणामों की जांच

Assertions स्थैतिक विधियाँ हैं जो वास्तविक परिणाम की अपेक्षित परिणाम से तुलना करती हैं और बेमेल होने पर अपवाद फेंकती हैं। JUnit 5 org.junit.jupiter.api.Assertions वर्ग प्रदान करता है जिसमें विभिन्न जांच परिदृश्यों के लिए 25 से अधिक विधियाँ हैं — सरल मान तुलना से लेकर टाइमआउट जांच और समूहित assertions तक।

  • assertEquals(expected, actual) — equals() के माध्यम से समानता की जांच करता है।
  • assertTrue(condition) — जांच करता है कि स्थिति सत्य है।
  • assertFalse(condition) — जांच करता है कि स्थिति असत्य है।
  • assertNotNull(object) — जांच करता है कि ऑब्जेक्ट null नहीं है।
  • assertNull(object) — जांच करता है कि ऑब्जेक्ट null है।
  • assertThrows(exception, executable) — जांच करता है कि कोड निर्दिष्ट अपवाद फेंकता है।
  • assertAll(executables) — कई assertions को समूहित करता है और पहली विफलता पर रुके बिना सभी को निष्पादित करता है।

अपवाद जांच के लिए assertThrows

assertThrows विधि विशेष ध्यान देने योग्य है, जो यह जांचने की अनुमति देती है कि कोड त्रुटि स्थितियों — शून्य से भाग, null पास करना, सीमा से अधिक — को सही ढंग से संभालता है।

java
@Test
void divisionByZeroShouldThrowException() {
    Calculator calc = new Calculator();

    ArithmeticException exception = assertThrows(
        ArithmeticException.class,
        () -> calc.divide(10, 0)
    );

    assertEquals("Cannot divide by zero", exception.getMessage());
}

JUnit में पैरामीटराइज्ड टेस्ट

पैरामीटराइज्ड टेस्ट एक ही परीक्षण विधि को तर्कों के विभिन्न सेटों के साथ चलाने की अनुमति देते हैं। JUnit 5 में, यह @ParameterizedTest एनोटेशन को डेटा स्रोत — @ValueSource, @CsvSource, @MethodSource या @EnumSource — के साथ संयोजित करके किया जाता है।

यह दृष्टिकोण कोड पुनरावृत्ति को मौलिक रूप से कम करता है: विभिन्न मानों के लिए दस समान परीक्षणों के बजाय, एक पैरामीटराइज्ड विधि लिखी जाती है। Google Testing Blog के अनुसार, पैरामीटराइजेशन कवरेज खोए बिना परीक्षण कोड की मात्रा को 40–60% तक कम कर देता है।

CsvSource के साथ उदाहरण

@CsvSource एनोटेशन परीक्षण में अल्पविराम-पृथक कई पंक्तियाँ भेजता है। प्रत्येक पंक्ति एक परीक्षण रन के अनुरूप होती है। JUnit स्वचालित रूप से स्ट्रिंग मानों को आवश्यक प्रकारों — int, long, String और अन्य — में परिवर्तित करता है।

java
@ParameterizedTest
@CsvSource({
    "1,    1,   2",
    "2,    3,   5",
    "10,  20,  30",
    "-1,   1,   0"
})
void additionWithMultipleInputs(int a, int b, int expected) {
    assertEquals(expected, a + b);
}

जटिल ऑब्जेक्ट्स के लिए MethodSource

जब इनपुट डेटा सरल संख्याओं या स्ट्रिंग्स से अधिक जटिल होता है, तो @MethodSource का उपयोग किया जाता है। यह एक स्थैतिक विधि को संदर्भित करता है जो तर्कों का Stream लौटाती है — उदाहरण के लिए, Arguments का Stream या DAO परत के परीक्षण के लिए User ऑब्जेक्ट्स का Stream।

Android प्रोजेक्ट्स के साथ JUnit का एकीकरण

Android विकास में, JUnit का उपयोग AndroidX Test के साथ किया जाता है, जो Activity, Content Provider और अन्य Android घटकों के परीक्षण के लिए एक्सटेंशन प्रदान करता है। JUnit बिना एमुलेटर के JVM पर निष्पादित यूनिट टेस्ट संभालता है, जबकि AndroidX Test डिवाइस पर इंस्ट्रुमेंटेड टेस्ट संभालता है।

Gradle सेटअप

Android प्रोजेक्ट में JUnit 5 जोड़ने के लिए, मॉड्यूल-स्तरीय build.gradle में org.junit.jupiter:junit-jupiter निर्भरता शामिल करना पर्याप्त है। AGP Gradle प्लगइन मानक Test Runner के माध्यम से JVM पर JUnit 5 परीक्षण चलाने का समर्थन करता है।

kotlin
// build.gradle.kts
android {
    testOptions {
        unitTests.isIncludeAndroidResources = true
    }
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.11.0")
    testImplementation("androidx.test:core-ktx:1.6.1")
}

JUnit के साथ ViewModel का परीक्षण

व्यवहार में, JUnit का उपयोग अक्सर ViewModel और रिपॉजिटरी — उन परतों के परीक्षण के लिए किया जाता है जिन्हें Android संदर्भ या एमुलेटर की आवश्यकता नहीं होती। ऐसा परीक्षण मिलीसेकंड में चलता है और समय बर्बाद किए बिना सैकड़ों बार निष्पादित किया जा सकता है।

  • ViewModel — अवस्था जांच: लोड हो रहा है, सफल, त्रुटि।
  • Repository — डेटा मैपिंग और त्रुटि प्रबंधन जांच।
  • UseCase — निर्भरता मॉक के साथ व्यावसायिक तर्क जांच।

JUnit 4 बनाम JUnit 5: मुख्य अंतर

JUnit 5 (Jupiter) केवल एक नया संस्करण नहीं है, बल्कि एक पूरी तरह से पुनः डिज़ाइन किया गया प्लेटफ़ॉर्म है जो तीन मॉड्यूल में विभाजित है: JUnit Platform (JVM पर परीक्षण निष्पादन), JUnit Jupiter (परीक्षण लिखने के लिए API), और JUnit Vintage (JUnit 4 के साथ पिछड़ी संगतता)। यह मॉड्यूलरिटी विभिन्न Test Engine — उदाहरण के लिए, Kotlin के लिए Spek या TestNG — को जोड़ने की अनुमति देती है।

विशेषताJUnit 4JUnit 5
पैकेजorg.junitorg.junit.jupiter
मूल एनोटेशन@Test (junit.framework से)@Test (org.junit.jupiter.api से)
Before/After@Before, @After, @BeforeClass@BeforeEach, @AfterEach, @BeforeAll
पैरामीटराइज्ड@RunWith(Parameterized.class)@ParameterizedTest + @ValueSource
एक्सटेंशन@Rule, @ClassRule@ExtendWith, अधिक लचीला API
Java न्यूनतमJava 5Java 8+

JUnit 4 से JUnit 5 में माइग्रेट करने के लिए सभी परीक्षणों को फिर से लिखने की आवश्यकता नहीं है — बस JUnit Vintage Engine जोड़ें और पुराने परीक्षण काम करते रहेंगे। नए परीक्षणों को JUnit 5 के साथ लिखने की सिफारिश की जाती है ताकि एक्सटेंशन, लैम्ब्डा assertions और अंतर्निहित पैरामीटराइजेशन समर्थन का लाभ उठाया जा सके।

अक्सर पूछे जाने वाले प्रश्न

JUnit Mockito से कैसे अलग है?

JUnit परीक्षण लिखने और चलाने के लिए एक फ्रेमवर्क है, जबकि Mockito मॉक ऑब्जेक्ट बनाने के लिए एक लाइब्रेरी है। इनका उपयोग एक साथ किया जाता है: JUnit परीक्षण निष्पादन का प्रबंधन करता है, और Mockito परीक्षण के तहत वर्ग की निर्भरताओं को बदलता है।

क्या Android प्रोजेक्ट्स में JUnit 5 का उपयोग किया जा सकता है?

हाँ, JUnit 5 Android प्रोजेक्ट्स के साथ पूरी तरह से संगत है। यूनिट टेस्ट के लिए, build.gradle में junit-jupiter निर्भरता जोड़ना पर्याप्त है। इंस्ट्रुमेंटेड टेस्ट AndroidX Test Runner के माध्यम से काम करते रहते हैं।

परीक्षण के लिए एनोटेशन का न्यूनतम सेट क्या है?

न्यूनतम रूप में, विधि से पहले एक @Test एनोटेशन पर्याप्त है। आरंभीकरण और सफाई के लिए @BeforeEach और @AfterEach की अनुशंसा की जाती है, लेकिन वे अनिवार्य नहीं हैं।

JUnit में Test Runner क्या है?

Test Runner JUnit का एक घटक है जो classpath को स्कैन करता है, @Test एनोटेशन वाली विधियों को ढूँढता है, परीक्षण वर्गों के इंस्टेंस बनाता है और परीक्षण चलाता है। JUnit 5 में, यह भूमिका JUnit Platform द्वारा कनेक्टेड Test Engine के साथ निभाई जाती है।

कैसे जांचें कि कोई विधि अपवाद फेंकती है?

assertThrows(Class, Executable) का उपयोग करें — यह अपेक्षित अपवाद प्रकार और विधि कॉल के साथ लैम्ब्डा लेता है। JUnit जांच करता है कि अपवाद वास्तव में फेंका गया था और आगे की जांच के लिए उसे लौटाता है।

सारांश

  • JUnit Java और Kotlin के लिए मानक यूनिट परीक्षण फ्रेमवर्क है, जो xUnit इकोसिस्टम की नींव है।
  • एनोटेशन @Test, @BeforeEach, @AfterEach परीक्षण वर्ग के जीवनचक्र का प्रबंधन करते हैं।
  • Assertions — assertEquals, assertTrue, assertThrows परिणामों की सत्यता की जांच करते हैं।
  • पैरामीटराइज्ड टेस्ट @CsvSource और @MethodSource के साथ कोड पुनरावृत्ति कम करते हैं।
  • JUnit 5 — प्लेटफ़ॉर्म, Jupiter API और एक्सटेंशन समर्थन के साथ मॉड्यूलर आर्किटेक्चर।
  • Android एकीकरण — JUnit बिना एमुलेटर के मानक Test Runner के माध्यम से JVM पर चलता है।
  • Test Runner स्वचालित रूप से @Test विधियों का पता लगाता और चलाता है, परिणामों की रिपोर्ट करता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें