पाठ 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));
}