Meer informatie over Mocking
1 Doel
Mocking is een techniek die wordt gebruikt om objecten of componenten te simuleren tijdens het testen. Het stelt ontwikkelaars in staat om gecontroleerde testomgevingen te creëren waarin specifieke gedragspatronen kunnen worden geverifieerd zonder afhankelijk te zijn van daadwerkelijke implementaties of externe bronnen.
2 Stappenplan
Splits het probleem op in stappen, zoals:
- Identificeer afhankelijkheden
- Kies een mocking framework
- Creëer mocks
- Definieer verwachtingen
- Voer testen uit
- Verifieer gedrag
Tip
Kies een mocking framework dat compatibel is met je testomgeving, zoals Moq of MSTest.
Casus
Stel, een applicatie heeft een service
WeatherService
die actuele weergegevens ophaalt via een externe API. Tijdens het testen wil je echter voorkomen dat je afhankelijk bent van de echte API en daarom maak je een mock vanWeatherService
.Acties:
- Maak een mock van
WeatherService
- Definieer het verwachte gedrag voor een specifieke test
- Verifieer dat de businesslogica correct reageert op de gesimuleerde gegevens
2.1 Identificeer afhankelijkheden
Identificeer welke klassen of interfaces gemockt moeten worden. Dit zijn meestal componenten die:
- Externe API’s aanroepen
- Gegevens ophalen uit een database
- Event driven zijn
Correctieve feedback tijdens de uitvoer
Controleer of de interface daadwerkelijk nodig is voor de test. Overbodige mocks kunnen tests onnodig complex maken.
Tip
Maak gebruik van interfaces zodat je mocks eenvoudig kunt vervangen zonder de onderliggende implementatie aan te passen.
Tips voor stap 2.1
- Begin met het isoleren van externe afhankelijkheden
- Focus op componenten met onvoorspelbaar gedrag (bijv. externe API’s)
- Overweeg om helpers te creëren voor herbruikbare mocks
2.2 Kies een mocking framework
Selecteer een geschikt framework voor mocking, zoals:
- Moq: Voor geavanceerde configuratie en verificatie
- NSubstitute: Eenvoudiger syntax, geschikt voor snelle implementaties
- MSTest Mock: Basisopties voor eenvoudige mocking
2.3 Creëer mocks
Gebruik het gekozen framework om mocks te creëren voor de geïdentificeerde afhankelijkheden. Bijvoorbeeld met Moq:
var weatherServiceMock = new Mock<IWeatherService>();
2.4 Definieer verwachtingen
Bepaal het verwachte gedrag van de mocks. Bijvoorbeeld:
weatherServiceMock.Setup(w => w.GetCurrentWeather()).Returns("Sunny");
2.5 Voer testen uit
Gebruik de mocks in je tests. Bijvoorbeeld:
var result = weatherServiceMock.Object.GetCurrentWeather();
2.6 Verifeer gedrag
Controleer of de verwachte methoden zijn aangeroepen en het juiste resultaat wordt ontvangen:
Assert.AreEqual("Sunny", result);
weatherServiceMock.Verify(w => w.GetCurrentWeather(), Times.Once);
Samenvattend
Mocking is essentieel voor het testen van componenten in isolatie. Door externe afhankelijkheden te simuleren, kun je gecontroleerde tests uitvoeren en specifieke scenario’s eenvoudig nabootsen.
Tips Mocking
- Gebruik duidelijke naamgeving voor mocks (userServiceMock, loggerMock)
- Beperk de scope van mocks tot wat nodig is voor de test: Met mocking kunnen grote tot kleine process worden gemocked. Bepaal in de test welk gedeelte afhankelijk is van externe bronnen, die je niet wil testen, en vervang dit met een mock.
- Overweeg Verify om te controleren of methoden zijn aangeroepen zoals verwacht