Gebruik van fakes, stubs en shims header image

Gebruik van fakes, stubs en shims

dinsdag 14 augustus 2018 ·Leestijd: 3 minuten
contacteer auteur:

Unit tests zijn zeer handig om je applicatie te testen en er zeker van te zijn dat je code werkt zoals verwacht. De naam unit tests komt voort uit het idee dat de test zo geschreven zijn dat er maar één enkel deel, één enkele unit van de code getest wordt. Dit wordt behaald door afhankelijkheden van de unit te elimineren. Dit kan gaan om bijvoorbeeld een database waar de unit data uit ophaalt of een formulier in de userinterface waar data uit voortkomt.
 
Waarom wordt er maar één unit getest? Als er een fout optreedt, kan er met zekerheid gezegd worden dat deze wordt veroorzaakt door de unit die getest wordt. Het kan dan niet liggen aan bijvoorbeeld een connectie met een database die verloren is gegaan.

Binnen .Net kunnen Fakes gebruikt worden om units te isoleren. Er zijn twee soorten fakes, stubs en shims.

Stubs

Om stubs te kunnen gebruiken, moet de applicatie zo zijn ingericht dat het interfaces gebruikt en geen classes. Een stub vervangt namelijk een class door dezelfde interface te implementeren als de class. Een voordeel van een stub is dat de stub altijd dezelfde data teruggeeft. Hierdoor kunnen er gemakkelijk tests geschreven worden. Een ander voordeel is dat de unit al getest kan worden, ook al is een ander component van de applicatie nog niet af.
Een voorbeeld van het gebruik van een stub: stel, de applicatie bevat een unit waarvoor er een test geschreven moet worden, StockAnalyzer. StockAnalyzer maakt gebruik van data uit het component RealStockFeed. RealStockFeed geeft altijd andere data terug, waardoor het moeilijk is om een test te schrijven. In dit geval kan er gebruik gemaakt worden van een stub om RealStockFeed te vervangen, StubStockFeed. Doordat StubStockFeed altijd dezelfde data teruggeeft, kan er gemakkelijk een test geschreven worden voor de unit StockAnalyzer. Door het gebruik van de StubStockFeed is de class StockAnalyzer niet meer afhankelijk van RealStockFeed en kan StockAnalyzer als onafhankelijke unit getest worden.

Stubs worden dus gebruikt om een deel van de applicatie (StockAnalyzer) te scheiden van een ander deel (RealStockFeed). Beide delen bevinden zich in hetzelfde project en kunnen beïnvloed worden. Het kan ook voorkomen dat een class zich niet in het project bevindt en dus ook niet beïnvloedbaar is, zoals een functie uit System.dll. Als een unit die van een dergelijke functie gebruik maakt, wilt scheiden en onafhankelijk wil maken, dan gebruik je shims.

Shims

Shims worden gebruikt om de unit te scheiden van componenten die niet onder de applicatie zelf vallen, zoals een functie uit System.dll of een API van een derde partij zonder testomgeving. Ook worden shims gebruikt voor classes die private, static of internal zijn. Kortom, classes en functies die niet aanpasbaar zijn.
Neem als voorbeeld DateTime.Now(). Dit deel code is afhankelijk van de lokale instellingen van de gebruiker. In plaats van DateTime.Now() wordt de shim aangeroepen, net als in het voorbeeld niet RealStockFeed maar StubStockFeed wordt aangeroepen. De shim geeft bij elke aanroep dezelfde datum en tijd terug, net als een stub. Hierdoor kunnen er makkelijk tests geschreven worden en is de afhankelijkheid opgeheven.

Stubs en shims maken het unit testen van een applicatie mogelijk door afhankelijkheden te vervangen en weg te nemen. Beiden geven bij elke aanroep dezelfde data terug, waardoor het makkelijker wordt om een test te schrijven. Stubs worden gebruikt als vervanging voor code binnen de applicatie, code die beïnvloedbaar is. Shims worden gebruikt voor code die buiten de applicatie valt, code die niet beïnvloedbaar is (internal of private classes bijvoorbeeld).


Andere blogartikelen

B2B E-commerce… Wakker worden!
Geschreven door
op dinsdag 28 juni 2022
Veel B2B-bedrijven in blijven hangen in; nauwelijks vindbare, verouderde B2B e-commerce websites met minimale conversiemogelijkheden en een betreurenswaardige gebruikerservaring. Zonde!
B2B Leadgeneratie: Alles wat je altijd al wilde weten!
Geschreven door
op maandag 27 juni 2022
B2B online leadgeneratie is het proces van het identificeren van de ideale klanten voor uw product of dienst, en hen vervolgens overhalen tot aankoop. Het is een essentiële activiteit voor B2B sales- en marketingteams.
Wat maakt een B2B webshop succesvol?
Geschreven door
op zondag 26 juni 2022
De opmars van de B2B webshop neemt toe. Regelmatig krijgen wij de vraag of er een groot verschil is tussen een consumentgerichte webshop en een puur B2B gedreven webshop. In deze blog leggen wij u uit hoe een B2B webshop succesvol kan zijn en worden.
Open Nieuwsbrief Inschrijving Footer

E-book

Zo wordt uw website een lead generator 
In 3 stappen uw website van visitekaartje naar salesfunnel

Download het E-book â€º