# JUnit 5 व Mockito — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-testing

> JUnit 5 अभिकथन व parameterized टेस्ट से यूनिट टेस्ट लिखें, और Mockito से सहयोगियों को stub कर जाँची जा रही क्लास को अलग करें।

## एक JUnit 5 टेस्ट

`@Test` मेथड `assertEquals`, `assertThrows` उपयोग करते हैं। Mockito स्टब सहयोगी बनाता है ताकि इकाई अलग से जाँची जाए।

```java
@Test
void appliesDiscount() {
    PriceService svc = new PriceService(rules);
    assertEquals(90, svc.total(100, "SAVE10"));
}

@Test
void rejectsUnknownCode() {
    when(rules.lookup("X")).thenReturn(Optional.empty());
    assertThrows(BadCode.class, () -> svc.total(100, "X"));
}
```

टेस्ट डिज़ाइन जाँच

**Quiz:** यूनिट टेस्ट में असली डेटाबेस कॉल की जगह मॉक क्यों?

- [ ] मॉक हमेशा असली से अधिक सटीक होते हैं
- [x] टेस्ट तेज़, नियतात्मक और एक इकाई पर केंद्रित रखने के लिए
- [ ] क्योंकि JUnit बाहरी कोड कॉल नहीं कर सकता
- [ ] अभिकथन लिखने से बचने के लिए

*Answer:* टेस्ट तेज़, नियतात्मक और एक इकाई पर केंद्रित रखने के लिए. इंटीग्रेशन टेस्ट असली DB जाँचते हैं; यूनिट टेस्ट लॉजिक अलग करते हैं।
