Unit testing met PHPUnit

Grote applicaties beginnen vaak klein, hierdoor denken we vaak dat testing niet van toepassing is want “Onze code werkt toch?”. Dit is een van de grootste misvattingen, testing is van levensbelang voor de doorontwikkeling van applicaties.

Zo zijn er nog een aantal mythes die vuit de wereld moeten geholpen worden, beginnende bij “het duurt te lang en kost te veel”.

Testing brengt inderdaad een langere development tijd met zich mee maar het vermindert kansen op bugs in de verdere ontwikkeling. Het zorgt ook voor makkelijkere refactoring van de code en geeft een indicatie van de vooruitgang op het project.

Doordat het project getest is moeten developers ook minder bang zijn dat ze de bestaande applicatie breken bij het schrijven van een nieuwe feature, want de testprocedures waken over de bestaande cases.

 

Automatisatie is een must

Automatisatie is een must in deze concurrentiële tijden, door het schrijven van tests kunnen we onze applicatie laten evalueren door een CI-tool (Continuous Integration) zoals bijvoorbeeld Jenkins, Bamboo, enz... Dit heeft als grote voordeel dat onze code gecontroleerd wordt zonder dat developers er tijd in moeten steken en zich kunnen focussen op hun nieuwe features.

Door de automatische testing wordt de kostprijs van ontwikkeling gedrukt. Developers verliezen minder tijd in het controleren van oude code en kunnen zich focussen op het aanbrengen van nieuwe features.

Voor development in PHP is er PHPUnit als unit testing platform gelanceerd door Sebastian Bergmann en te vinden op Github.

Starten met PHPUnit kan makkelijk als je de stappen van de installatie volgt op de website van phpunit.

 

phpunit

 

Terminologie in UnitTesting

Unit Testing werkt door middel van het maken van stellingen of beter gezegd asserts. Via deze weg kan je controleren of bepaalde stukken code ook effectief teruggeven wat ervan mag worden verwacht. Dit kan men doen aan de hand van een aantal basisstellingen zoals bijvoorbeeld:

  • AssertTrue/AssertFalse waarbij we controleren of iets waar of vals is.
  • AssertEquals waarbij we controleren of iets gelijk is aan iets anders.
  • AssertType waarbij we kijken of iets van een bepaald type is.

Er zijn natuurlijk ook nog andere hulpmiddelen bij het schrijven van een test.

Fixtures is de term die gebruikt wordt om de basis van onze test te bepalen. Onze applicatie wordt zo naar een “known state” gebracht voor de tests gaan worden uitgevoerd. Dit zorgt er voor dat je elke keer weer zeker mag zijn dat tests in exact dezelfde omstandigheden worden uitgevoerd. Deze “state” is ook gedeeld binnen de huidige tests en moet dan ook bij aanvang bepaald worden met “setUp” en na de tests terug gedraaid worden met “tearDown”.

Mock objecten doen wat hun naam omschrijft, ze doen alsof ze iets zijn. Deze kunnen gebruikt worden wanneer onze code bijvoorbeeld afhankelijk is van externe factoren zoals een API. Mock objecten gaan dan het gedrag van de feitelijke dependency imiteren zodat tests altijd gecontroleerd werken.

In onderstaande slides kan je een overview vinden van PHPUnit en een voorbeeld van eenvoudige testprocedures.

Meer weten? Contacteer ons!

Door Intracto