Lesson 31 / 38

Mockito Basics

Isolate the class under test by replacing its real collaborators with Mockito mocks, stub their behaviour with when/thenReturn, and verify interactions.

Stub a dependency

mock(Type.class) creates a fake implementation with no real behaviour; when(...).thenReturn(...) programs what it should return for a given call. The class under test is real — only its dependency is faked.

@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 and argument matchers

verify(mock).method(args) asserts an interaction actually happened — essential when the method under test returns void and its whole effect is calling a collaborator. any(), anyInt(), eq() match arguments loosely when the exact value doesn't matter.

@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());
}