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 van WeatherService.

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