# Mockito मूल बातें — एडवांस्ड जावा

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

> जाँची जा रही क्लास को उसके असली सहयोगियों की जगह Mockito मॉक से बदलकर अलग करें, when/thenReturn से व्यवहार stub करें, और इंटरैक्शन verify करें।

## एक dependency stub करें

`mock(Type.class)` बिना असली व्यवहार वाला नक़ली implementation बनाता है; `when(...).thenReturn(...)` किसी कॉल के लिए यह तय करता है कि क्या लौटाया जाए। जाँची जा रही क्लास असली रहती है — केवल उसकी dependency नक़ली होती है।

```java
@Test
void appliesDiscountFromRepo() {
    DiscountRepository repo = mock(DiscountRepository.class);
    when(repo.findByCode("SAVE10")).thenReturn(Optional.of(new Discount(10)));

    PriceService svc = new PriceService(repo);
    assertEquals(90, svc.total(100, "SAVE10"));
}
```

## verify व आर्ग्युमेंट matcher

`verify(mock).method(args)` पुष्टि करता है कि कोई इंटरैक्शन वाक़ई हुआ — तब ज़रूरी जब जाँची जा रही मेथड `void` लौटाए और उसका पूरा प्रभाव किसी सहयोगी को कॉल करना हो। `any()`, `eq()` जैसे matcher सटीक मान मायने न रखने पर उपयोग होते हैं।

```java
@Test
void sendsReceiptOnPlaceOrder() {
    EmailSender sender = mock(EmailSender.class);
    OrderService svc = new OrderService(sender);

    svc.place(new Order("A1", 3));

    verify(sender).send(eq("A1"), anyString());
}
```
