Testning på avancerad nivå: JUnit, Mockito och integrationstester · Lektion

Fånga argument med ArgumentCaptor

Använd Mockitos ArgumentCaptor för att fånga och kontrollera de exakta objekt som skickas till en mock i komplexa scenarier.

Lektion 4 av 413 steg

Fånga argument med ArgumentCaptor är en gratis lektion i Testning på avancerad nivå: JUnit, Mockito och integrationstester på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Testning på avancerad nivå: JUnit, Mockito och integrationstester, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Testning på avancerad nivå: JUnit, Mockito och integrationstester innehåller totalt 4 lektioner.

Granska det som skickades

Ibland räcker det inte att verifiera att en metod anropades. Ni behöver kontrollera det faktiska argument som koden skapade och skickade. Mockito's ArgumentCaptor hämtar värdet så att ni kan granska det.

Matchare kontra captors

Argumentmatchare som eq(...) kontrollerar indata under verifieringen. En captor registrerar i stället argumentet, så att ni kan göra mer omfattande kontroller efteråt.

Skapa en captor

Deklarera en captor för den typ som ni förväntar er att fånga.

ArgumentCaptor<User> captor =
    ArgumentCaptor.forClass(User.class);

Fånga under verify

Skicka captorns capture() där argumentet skulle ha stått inuti verify.

verify(repo).save(captor.capture());

Läs värdet

Efter verifieringen hämtar ni det fångade objektet och kontrollerar dess fält.

User saved = captor.getValue();
assertEquals("Ada", saved.getName());

Fullständigt exempel

Här bekräftar vi att tjänsten skapar rätt användare innan den sparar den.

service.register("Ada", "ada@x.io");
verify(repo).save(captor.capture());
assertEquals("ada@x.io",
    captor.getValue().getEmail());

Fånga flera anrop

Om metoden anropades flera gånger använder ni getAllValues() för att hämta alla fångade argument i rätt ordning.

verify(repo, times(2)).save(captor.capture());
List<User> all = captor.getAllValues();

Annoteringen @Captor

Ni kan deklarera captors som fält med @Captor när ni använder Mockito-tillägget, vilket minskar mängden standardkod.

@Captor
ArgumentCaptor<User> captor;

Captor eller matchare?

Använd en matchare för enkla likhetskontroller vid anropstillfället. Använd en captor när argumentet är komplext, byggs internt eller behöver kontrolleras på flera sätt.

Undvik överanvändning

Captors kopplar tester till interna detaljer i hur objekt skapas. Använd dem för genuint komplexa argument, inte för allt, så förblir testerna tåliga.

Varför det är viktigt

Med captors kan ni verifiera de exakta data som koden skickar till samarbetande komponenter och upptäcka subtila fel i mappning eller transformering.

Snabb kontroll

Hur hämtar ni det fångade argumentet efter verifieringen?

Sammanfattning

Ni har lärt er att fånga argument:

  • ArgumentCaptor.forClass eller @Captor skapar en captor
  • Skicka capture() inuti verify
  • getValue() / getAllValues() läser de fångade data
  • Använd captors för komplexa, internt skapade argument
Gratis att börja

Lär dig Testning på avancerad nivå: JUnit, Mockito och integrationstester med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Fånga argument med ArgumentCaptor” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Testning på avancerad nivå: JUnit, Mockito och integrationstester, inklusive ”Fånga argument med ArgumentCaptor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Testning på avancerad nivå: JUnit, Mockito och integrationstester innehåller totalt 4 lektioner.

Vad lär jag mig i ”Fånga argument med ArgumentCaptor”?

Använd Mockitos ArgumentCaptor för att fånga och kontrollera de exakta objekt som skickas till en mock i komplexa scenarier. Ni övar på Testning på avancerad nivå: JUnit, Mockito och integrationstester med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Testning på avancerad nivå: JUnit, Mockito och integrationstester?

Du behöver inga förkunskaper. Utbildningen i Testning på avancerad nivå: JUnit, Mockito och integrationstester på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Fånga argument med ArgumentCaptor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Testning på avancerad nivå: JUnit, Mockito och integrationstester-lektionen?

Ja. Varje Testning på avancerad nivå: JUnit, Mockito och integrationstester-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Anpassade svar och callbacks
  2. Mockning av statiska metoder och konstruktorer
  3. Bästa praxis för Mockito
  4. Fånga argument med ArgumentCaptor
← Tillbaka till Testning på avancerad nivå: JUnit, Mockito och integrationstester