Returnwaarden stubben
Configureer mockobjecten om specifieke waarden terug te geven of exceptions te gooien wanneer hun methoden worden aangeroepen.
Returnwaarden stubben is een gratis Testen beheersen: JUnit, Mockito en integratietesten-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Testen beheersen: JUnit, Mockito en integratietesten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Introductie tot het configureren van mocks
Wanneer je een mockobject maakt, heeft het geen echt gedrag. De methoden doen standaard niets en retourneren vaak null, 0 of lege collecties.
Mockconfiguratie is het proces waarbij je een mockobject leert hoe het op specifieke methodeaanroepen moet reageren. Het is alsof je je mock een script geeft om te volgen!
Zo kun je de exacte voorwaarden voor je tests bepalen en de code die je daadwerkelijk test isoleren.
Mocks waarden laten retourneren
De meest gebruikelijke manier om een mock te configureren is met when().thenReturn(). Hiermee vertel je Mockito: "Wanneer deze specifieke methode op de mock wordt aangeroepen, retourneer dan deze vooraf gedefinieerde waarde."
when(mock.someMethod()).thenReturn(value);
value kan elk object of primitief type zijn dat overeenkomt met het retourtype van de methode.
Codevoorbeeld met thenReturn()
Probeer dit eenvoudige voorbeeld uit te voeren. Let erop dat de add-methode van de mock alleen onze geconfigureerde waarde retourneert wanneer deze wordt aangeroepen met (1, 1).
import static org.mockito.Mockito.*;
interface CalculatorService {
int add(int a, int b);
}
public class Main {
public static void main(String[] args) {
// Create a mock of CalculatorService
CalculatorService mockCalc = mock(CalculatorService.class);
// Stub the add(1, 1) method to return 5
when(mockCalc.add(1, 1)).thenReturn(5);
// Call the stubbed method
System.out.println("1 + 1 = " + mockCalc.add(1, 1));
// Call a method that was NOT stubbed
System.out.println("2 + 2 = " + mockCalc.add(2, 2));
}
}Mocks fouten laten genereren
Soms moet je testen hoe je code met fouten omgaat. Je kunt een mock zo configureren dat deze een uitzondering genereert wanneer een specifieke methode wordt aangeroepen, met when().thenThrow().
when(mock.failingMethod()).thenThrow(new SomeException("Error!"));
Dit is essentieel voor het testen van foutpaden en om ervoor te zorgen dat je toepassing onverwachte situaties netjes afhandelt.
Codevoorbeeld met thenThrow()
In dit voorbeeld is onze DataService-mock zo geconfigureerd dat deze een IllegalArgumentException genereert als we gegevens proberen op te halen met een "ongeldige" ID.
import static org.mockito.Mockito.*;
interface DataService {
String fetchData(String id);
}
public class Main {
public static void main(String[] args) {
DataService mockData = mock(DataService.class);
// Stub fetchData("invalid") to throw an exception
when(mockData.fetchData("invalid"))
.thenThrow(new IllegalArgumentException("ID not found!"));
// Call a method that was NOT stubbed (returns null by default)
System.out.println("Fetching 'valid': " + mockData.fetchData("valid"));
// Call the stubbed method that throws an exception
try {
System.out.println("Fetching 'invalid': " + mockData.fetchData("invalid"));
} catch (IllegalArgumentException e) {
System.out.println("Caught error: " + e.getMessage());
}
}
}Dynamische reacties: thenAnswer()
Wat als je wilt dat de reactie van de mock afhankelijk is van de argumenten die eraan worden doorgegeven, of dat de mock aangepaste logica uitvoert?
when().thenAnswer() is hiervoor de oplossing. Deze methode neemt een Answer-object aan, vaak een lambda of anonieme klasse, dat meer controle biedt:
- Je krijgt toegang tot de werkelijke methodeargumenten.
- Je kunt berekeningen of complexe logica uitvoeren.
- Je kunt dynamisch een waarde retourneren of een uitzondering genereren.
Codevoorbeeld met thenAnswer()
Hier voert de multiply-methode op onze mock daadwerkelijk de vermenigvuldiging uit op basis van de ontvangen argumenten. Dit is dynamischer dan een vaste retourwaarde.
import static org.mockito.Mockito.*;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
interface MathService {
int multiply(int a, int b);
}
public class Main {
public static void main(String[] args) {
MathService mockMath = mock(MathService.class);
// Stub multiply for any two integers to perform actual multiplication
when(mockMath.multiply(anyInt(), anyInt())).thenAnswer(
new Answer<Integer>() {
public Integer answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Integer arg1 = (Integer) args[0];
Integer arg2 = (Integer) args[1];
return arg1 * arg2; // Custom logic based on arguments
}
}
);
System.out.println("3 * 4 = " + mockMath.multiply(3, 4));
System.out.println("5 * 2 = " + mockMath.multiply(5, 2));
System.out.println("7 * 0 = " + mockMath.multiply(7, 0));
}
}Meerdere retourwaarden: koppelen
Wat als je wilt dat een mockmethode bij opeenvolgende aanroepen verschillende waarden retourneert?
Met Mockito kun je configuratiemethoden aan elkaar koppelen. Je kunt meerdere retourwaarden aan thenReturn() meegeven, of meerdere aanroepen van thenReturn(), thenThrow() of thenAnswer() koppelen.
when(mock.method()).thenReturn(val1, val2, val3);when(mock.method()).thenReturn(val1).thenThrow(ex).thenReturn(val3);
Nadat alle opgegeven waarden of acties zijn gebruikt, wordt de laatste herhaald bij volgende aanroepen.
Demonstratie van gekoppelde configuratie
Bekijk hoe onze mock eerst "Item A" en vervolgens "Item B" retourneert, en daarna een uitzondering genereert bij volgende aanroepen van poll().
import static org.mockito.Mockito.*;
import java.util.Queue;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue<String> mockQueue = mock(Queue.class);
// Stub poll() to return different values/actions on successive calls
when(mockQueue.poll())
.thenReturn("Item A")
.thenReturn("Item B")
.thenThrow(new IllegalStateException("Queue is empty!"));
System.out.println("Poll 1: " + mockQueue.poll()); // Returns "Item A"
System.out.println("Poll 2: " + mockQueue.poll()); // Returns "Item B"
try {
System.out.println("Poll 3: " + mockQueue.poll()); // Throws exception
} catch (IllegalStateException e) {
System.out.println("Caught error on Poll 3: " + e.getMessage());
}
// Subsequent calls will repeat the last action (throw exception)
try {
System.out.println("Poll 4: " + mockQueue.poll());
} catch (IllegalStateException e) {
System.out.println("Caught error on Poll 4: " + e.getMessage());
}
}
}Controleer je begrip
Je test een methode die items uit een wachtrij verwerkt. Je moet ervoor zorgen dat de methode poll() van de wachtrij eerst "Task 1", daarna "Task 2" en ten slotte null retourneert, wat een lege wachtrij aangeeft, bij volgende aanroepen. Welke Mockito-configuratie zou je gebruiken?
Retourwaarden configureren: samenvatting
In deze les heb je geleerd hoe je het gedrag van je mockobjecten beheerst door hun methodeaanroepen te configureren. Dit is essentieel om de te testen eenheid te isoleren en voorspelbare testomgevingen te maken.
when().thenReturn(): Om een mockmethode een specifieke waarde te laten retourneren.when().thenThrow(): Om een mockmethode een uitzondering te laten genereren.when().thenAnswer(): Voor dynamische reacties op basis van methodeargumenten of aangepaste logica.- Koppelen: Om een reeks verschillende gedragingen voor opeenvolgende aanroepen van dezelfde methode te definiëren.
Vervolgens bekijken we de argumentmatchers van Mockito voor nog flexibelere configuratie en verificatie!
Leer Testen beheersen: JUnit, Mockito en integratietesten met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Returnwaarden stubben” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Testen beheersen: JUnit, Mockito en integratietesten, waaronder “Returnwaarden stubben”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Wat leer ik in “Returnwaarden stubben”?
Configureer mockobjecten om specifieke waarden terug te geven of exceptions te gooien wanneer hun methoden worden aangeroepen. Je oefent met Testen beheersen: JUnit, Mockito en integratietesten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Testen beheersen: JUnit, Mockito en integratietesten te beginnen?
Ervaring vooraf is niet nodig. Testen beheersen: JUnit, Mockito en integratietesten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Returnwaarden stubben”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Testen beheersen: JUnit, Mockito en integratietesten?
Ja. Elke les over Testen beheersen: JUnit, Mockito en integratietesten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Returnwaarden stubben
- Argument matchers van Mockito
- Echte objecten spioneren
- Exceptions opwerpen en opeenvolgende aanroepen