Seb leert unittesten met PHP (deel 1)
Oké, dit wordt zo'n blogpost die ik voor mijn gevoel voor niemand schrijf, omdat het grootste deel van mijn lezers geen idee heeft van PHP en de lezers die wel een idee van PHP hebben naar mijn gevoel allang weten wat unittesten is. Maar hé, misschien ben jij ook wel zoiemand als ik, die wel z’n weg weet in PHP maar gewoon nooit aan unittesten is toegekomen. Bij dezen draag ik deze blogpost op aan jou.
Vorig jaar wist ik eigenlijk niet goed wat Git was, terwijl ik zag dat vrijwel iedereen dat gebruikte. Het was er gewoon nooit van gekomen, na HTML en CSS en PHP en MySQL en Javascript en al die duizend andere dingen die je moet leren als je een website wil bouwen. Dus leerde ik het afgelopen jaar Git (en Github) te gebruiken en daar ben ik heel blij mee. Het resulteerde in mijn eerste gemergede pull request, wat gewoon een knip-en-plakwerkje was, maar toch goed voelt.
Wie de PR leest ziet dat ik na mijn knip-en-plakwerkje nog werd gevraagd om ook even de test te knip-en-plakken. Spannend. Dus ik knipte en plakte en hoopte dat alles goed kwam. Ik hoorde er niets meer over en het werd gemerged, dus alles was blij en bloemetjes, maar er bleef wel een knagend gevoel over: hoe zit dat, geautomatiseerd testen?
Na enig research bleek dat zowel php-comments als Kirby (het CMS waar dit weblog op draait) hun tests uiteindelijk bestaan uit een class die PHPUnit_Framework_TestCase
extend. Eén duckduckgo later vond ik phpunit.de, wat blijkbaar dé testsuite voor PHP is. Ik sloot alles af en besloot er later weer naar te kijken.
Later
Vandaag was ik dus vastbesloten om uit te zoeken hoe dit werkte. Of beter eigenlijk: ik kwam het weer tegen en raakte er langzaam in verzeild toen ik eigenlijk iets anders zou moeten doen.
Het begon allemaal heel simpel. Op de site van phpunit stond een link voor ‘Take the first steps’, die wel relevant leek. Daar stond het volgende stappenplan voor in de terminal:
$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ sudo mv phpunit.phar /usr/local/bin/phpunit
$ phpunit --version
PHPUnit 5.7.0 by Sebastian Bergmann and contributors.
Ik had al problemen bij stap 1 omdat mijn Mac kennelijk geen wget
heeft. Ik probeerde nog wat met curl https://(…) -L | nano
maar dat lukte ook niet geweldig. Uiteindelijk heb ik ‘m gewoon even via de browser gedownload. De overige stapjes werkten prima.
De volgende stap blijkt dan dus om in terminal naar de map te gaan waar het bestand phpunit.xml
in zit, in mijn geval dus cd ~/code/php-comments/
. Toen ik phpunit
deed in die map, kreeg ik een foutmelding dat /vendor/autoload.php
niet bestond. Dit los je op in de volgende twee stappen, die ik natuurlijk in de verkeerde volgorde deed:
-
Roep
phpunit
aan met de bootstrap-vlag:$ phpunit --bootstrap vendor/autoload.php
- Installeer indien nodig eerst (!) de dependencies via composer.
$ composer install
Toen ik nogmaals stap 1 uitvoerde kreeg ik het volgende:
$ phpunit --bootstrap vendor/autoload.php
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
................................. 33 / 33 (100%)
Time: 105 ms, Memory: 12.50MB
OK (33 tests, 82 assertions)
We kunnen dus gerust stellen dat mijn knip-en-plakwerkje alle tests haalt. Volgende stap is om zelf tests te gaan schrijven voor dingen die ik maak, maar dat bewaren we even voor een andere keer.