User Tools

Site Tools


tanszek:oktatas:mockito

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:mockito [2026/10/01 12:27] – superusertanszek:oktatas:mockito [2026/10/01 12:54] (current) – superuser
Line 112: Line 112:
 Ha jó, akkor a BankServiceTest is zöld lesz. Ha jó, akkor a BankServiceTest is zöld lesz.
 {{ :tanszek:oktatas:mockdemo_1.zip | A kódot letöltheted}} {{ :tanszek:oktatas:mockdemo_1.zip | A kódot letöltheted}}
 +
 +6. Most ellenőrizzük a számlaegyenleget is:
 +<code:java>
 +package com.example;
 +
 +import org.junit.jupiter.api.Test;
 +
 +import static org.junit.jupiter.api.Assertions.assertEquals;
 +import static org.mockito.Mockito.mock;
 +import static org.mockito.Mockito.verify;
 +
 +class BankServiceTest {
 +
 +    @Test
 +    void depositSendsNotification() {
 +
 +        NotificationService notificationService =
 +            mock(NotificationService.class);
 +
 +        BankService bankService =
 +            new BankService(notificationService);
 +
 +        BankAccount account =
 +            new BankAccount();
 +
 +        bankService.deposit(account, 1000);
 +
 +        assertEquals(
 +            1000.0,
 +            account.getBalance()
 +        );
 +
 +        verify(notificationService)
 +            .send("Deposit successful");
 +    }
 +}
 +</code>
 +Itt már két dolgot tesztelünk:
 +BankAccount állapota
 ++
 +NotificationService meghívása
 +
 +=== 7. Nézzük meg, mit jelent a mockolás gondolatilag. ===
 +Normál programban:
 +BankService -» NotificationService -» valódi email / SMS / API
 +
 +Tesztben:
 +BankService -» MOCK NotificationService
 +
 +Így a teszt gyors, izolált, és nem használ külső rendszert.
 +
 +=== 8. A következő fontos Mockito fogalom a when(...).thenReturn(...) ===
 +Ehhez csináljunk egy új interfészt:
 +src/main/java/com/example/ExchangeRateService.java
 +<code:java>
 +package com.example;
 +
 +public interface ExchangeRateService {
 +
 +    double getRate(String from, String to);
 +}
 +</code>
 +Most a ExchangeRateServiceTest.java tesztfájlban:
 +<code:java>
 +ExchangeRateService rateService =
 +    mock(ExchangeRateService.class);
 +
 +when(
 +    rateService.getRate("EUR", "HUF")
 +).thenReturn(400.0);
 +</code>
 +Ez azt jelenti:
 +ha valaki ezt hívja:
 +<code:java>
 +getRate("EUR", "HUF")
 +</code>
 +akkor a mock válasza legyen:
 +
 +400.0
 +
 +Ehhez kell az import:
 +<code:java>
 +import static org.mockito.Mockito.when;
 +</code>
 +
 +=== 9. A három legfontosabb Mockito elem tehát: ===
 +<code:java>
 +mock(...)
 +</code>
 +ál objektum létrehozása.
 +<code:java>
 +when(...).thenReturn(...)
 +</code>
 +megmondjuk, mit válaszoljon.
 +<code:java>
 +verify(...)
 +</code>
 +ellenőrizzük, hogy meghívták-e.
 +
 +=== 10. Következő lépésként érdemes ezt a példát továbbvinni @Mock és @InjectMocks használatával, mert valódi projektekben gyakran így írják a Mockito teszteket: ===
 +<code:java>
 +@Mock
 +private NotificationService notificationService;
 +
 +@InjectMocks
 +private BankService bankService;
 +</code>
 +Ez tisztább, mint minden tesztben kézzel meghívni a mock()-ot.
tanszek/oktatas/mockito.1790857648.txt.gz · Last modified: by superuser