Mestrer test: JUnit, Mockito og integrationstest · Lektion

Injektion af mocks med @Mock og @InjectMocks

Brug Mockito-annotations til at forbinde mockede afhængigheder med klassen under test, så De reducerer mængden af boilerplate i opsætningskoden.

Lektion 4 af 413 trin

Injektion af mocks med @Mock og @InjectMocks er en gratis Mestrer test: JUnit, Mockito og integrationstest-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Mestrer test: JUnit, Mockito og integrationstest, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.

Hvorfor annoteringer?

Det virker at oprette mocks manuelt med mock(Type.class), men for klasser med flere afhængigheder bliver det gentagende. Mockito tilbyder annoteringer, som erklærer og forbinder mocks for dig.

  • @Mock erklærer et mock-felt
  • @InjectMocks opbygger det rigtige objekt og injicerer mocks

Klassen under test

Forestil dig en OrderService, der afhænger af en PaymentGateway. Vi vil teste servicen, mens vi kontrollerer gatewayen.

class OrderService {
  private final PaymentGateway gateway;
  OrderService(PaymentGateway gateway) { this.gateway = gateway; }
  boolean checkout(double amount) {
    return gateway.charge(amount);
  }
}

Erklæring af en @Mock

Anmærk et felt med @Mock, så opretter Mockito automatisk en mock-instans til det, når annoteringerne behandles.

@Mock
PaymentGateway gateway;

Brug af @InjectMocks

@InjectMocks fortæller Mockito, at målobjektet skal instantieres, og at alle @Mock-felter skal injiceres i det via konstruktøren, en setter eller et felt.

@Mock PaymentGateway gateway;

@InjectMocks OrderService service;

Aktivering af annoteringerne

Annoteringer gør ikke noget af sig selv. Med JUnit 5 aktiverer du dem ved at bruge @ExtendWith(MockitoExtension.class) på testklassen.

@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
  @Mock PaymentGateway gateway;
  @InjectMocks OrderService service;
}

Den ældre openMocks-tilgang

Uden udvidelsen kan du kalde MockitoAnnotations.openMocks(this) i en @BeforeEach-metode. Foretræk udvidelsen, når du kan.

@BeforeEach
void setUp() {
  MockitoAnnotations.openMocks(this);
}

Skriv testen

Opret nu en stub for den injicerede mock, og kør servicen. Servicen indeholder allerede den mockede gateway, så manuel sammenkobling er ikke nødvendig.

@Test
void checkoutSucceeds() {
  when(gateway.charge(100.0)).thenReturn(true);
  assertTrue(service.checkout(100.0));
}

Injektionsstrategier

Mockito forsøger injektion i denne rækkefølge:

  • Konstruktør-injektion (foretrukken)
  • Setter-injektion
  • Felt-injektion

Konstruktørinjektion er den sikreste, fordi den fungerer med final-felter.

Flere afhængigheder

En klasse med flere samarbejdspartnere får blot flere @Mock-felter. Mockito matcher hver af dem efter type under injektionen.

@Mock PaymentGateway gateway;
@Mock InventoryRepo inventory;
@InjectMocks OrderService service;

Når injektion mislykkes uden fejl

Hvis en afhængighed ikke kan matches, forbliver feltet null i stedet for at udløse en fejl. En NullPointerException under testen betyder ofte, at injektionen ikke fandt sted som forventet. Kontrollér typer og konstruktørsignaturer.

Renere tests

Annoteringer fjerner gentagne kald til mock(...) og new Service(...), så hver test kan fokusere på adfærd i stedet for sammenkobling.

Hurtigt tjek

Hvilken annotering opbygger det rigtige objekt og injicerer mocks i det?

Opsummering

Du har lært at sammenkoble mocks deklarativt:

  • @Mock erklærer et mock-felt
  • @InjectMocks opbygger målobjektet og injicerer mocks
  • Aktivér med @ExtendWith(MockitoExtension.class)
  • Konstruktørinjektion foretrækkes og understøtter final-felter
Gratis at komme i gang

Lær Mestrer test: JUnit, Mockito og integrationstest med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Injektion af mocks med @Mock og @InjectMocks” gratis?

Ja — alle 3 lektioner i læringssporet Mestrer test: JUnit, Mockito og integrationstest, inklusive “Injektion af mocks med @Mock og @InjectMocks”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Injektion af mocks med @Mock og @InjectMocks”?

Brug Mockito-annotations til at forbinde mockede afhængigheder med klassen under test, så De reducerer mængden af boilerplate i opsætningskoden. Du øver dig i Mestrer test: JUnit, Mockito og integrationstest med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Mestrer test: JUnit, Mockito og integrationstest?

Der kræves ingen tidligere erfaring. Mestrer test: JUnit, Mockito og integrationstest på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Injektion af mocks med @Mock og @InjectMocks”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Mestrer test: JUnit, Mockito og integrationstest-lektion?

Ja. Alle Mestrer test: JUnit, Mockito og integrationstest-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Mocks, stubs og fakes
  2. Oprettelse af mocks med Mockito
  3. Verificering af mock-interaktioner
  4. Injektion af mocks med @Mock og @InjectMocks
← Tilbage til Mestrer test: JUnit, Mockito og integrationstest