पाठ 30 / 38

JUnit 5 गहराई से

assertEquals, assertThrows, assertAll जैसे पूर्ण अभिकथन टूलकिट का उपयोग करें, और JUnit 5 के lifecycle annotation से प्रति-टेस्ट व प्रति-क्लास सेटअप/टियरडाउन नियंत्रित करें।

Lifecycle annotation

@BeforeEach/@AfterEach हर टेस्ट मेथड के इर्द-गिर्द चलते हैं (टेस्ट के बीच कोई रिसाव नहीं); @BeforeAll/@AfterAll पूरी क्लास के लिए एक बार चलते हैं और static होने चाहिए। @BeforeAll का उपयोग केवल महँगे, सुरक्षित साझा सेटअप के लिए करें।

assertAll व assertThrows

assertAll संबंधित अभिकथनों को समूहित करता है ताकि पहला असफल होने पर भी सभी चलें और रिपोर्ट हों — अकेला assertEquals पहली असफलता पर रुक जाता। assertThrows किसी विशेष exception प्रकार की पुष्टि करता है।

@Test
void orderValidation() {
    Order o = new Order(-5, "");
    assertAll(
        () -> assertTrue(o.hasErrors()),
        () -> assertEquals(2, o.errorCount())
    );

    var ex = assertThrows(IllegalArgumentException.class,
        () -> new Order(-1, "x"));
    assertTrue(ex.getMessage().contains("quantity"));
}

Parameterized टेस्ट

@ParameterizedTest के साथ @ValueSource, @CsvSource, या @MethodSource एक ही टेस्ट बॉडी को हर इनपुट पर चलाता है, कॉपी-पेस्ट किए @Test मेथड की जगह लेता है।

@ParameterizedTest
@CsvSource({"2,4", "3,9", "5,25"})
void squares(int in, int expected) {
    assertEquals(expected, MathUtil.square(in));
}