Enhetstesta dina klasser med PHPUnit

By . Latest revision .

Du har sedan tidigare ett antal klasser i PHP som du nu skall skapa en test suite för.

Din test suite innehåller enhetstester som körs med PHPUnit.

Du skall försöka att nå så hög kodtäckning som möjligt.

#Förkunskaper

Du har PHP i din path i terminalen och du har installerat composer.

Du kan grunderna i enhetstestning med phpunit.

Du har installerat Xdebug och kan mäta kodtäckning med phpunit.

#Genomgång

Här är en video som “pratar” dig igenom uppgiftens upplägg och visar hur du kommer igång.

Kurs mvc kmom03 tisdagsgenomgång, del 3/3 uppgiften (Zoom med Mikael).

#Introduktion och förberedelse

Gör följande steg för att förbereda dig för uppgiften.

#Spara filerna i me

Alla filerna sparar du i ditt kursrepo under me/game/.

Alla referenser till filer och kataloger du nu skall skapa förutsätter att de ligger under denna katalogen.

#Kopiera en test suite för dina controllers

I katalogen example/game/phpunit ligger ett antal filer som ger dig en komplett uppsättning av testfall för att täcka de controllers som fanns med i förra kursmomentets exempelkod.

Du kan kopiera in den katalogstrukturen till din me/game, antingen som den är eller fil för fil. Du bör dubbelkolla vilka filer som ligger i katalogen innan du börjar kopiera, för att undvika att du skriver över någon av dina egna filer.

Om du väljer så kan du kopiera alla filerna på en gång, så här.

# Gå till roten av ditt kursrepo

# Försiktig, dina egna filer under me/game kan nu skrivas över
# av exemplets filer, du bör egentligen göra detta fil för fil
rsync -av example/game/phpunit/ me/game/

Du har nu en komplett test suite för de controller som fanns i exempelkoden.

#Installera om din kodbas

För att vara säker på att du har en ren kodbas kan du göra en ominstallation av repots miljö.

# Gå till me/game
make clean-all install

Nu har du en ren miljö med senaste versionerna av de program och moduler som används i ditt repo, dels utvecklingsverktyg och dels kod som behövs för att din applikation skall fungera.

#Kör enhetstesterna

Du kan nu köra enhetstesterna från test suiten med PHPUnit.

make phpunit

Du kan även köra samliga linters och enhetstester så här.

make test

Om du har installerat Xdebug så kommer följande rader visas i utskriften.

Generating code coverage report in Clover XML format ... done
Generating code coverage report in HTML format ... done

Det innebär att rapporter från kodtäckningen är genererade. I vårt fall placeras de under katalogen build/ och du kan öppna din webbläsare för att se rapporten från kodtäckningen.

firefox build/coverage

Eller så letar du reda på filen build/coverage/index.html och drar den till din webbläsare i en ny flik.

#Krav

Kraven är uppdelade i sektioner.

#Skapa en test suite för dina klasser

  1. Din Makefile skall stödja make phpunit och make test så som exempelkoden använder det.

  2. Din test suite skall placeras i katalogen test/ och den katalogen skall innehålla en konfigurationsfil config.php.

  3. Du får gärna skriva om dina klasser för att göra dem mer testbara, om det känns rimligt. Snygg och ren kod är ofta testbar kod.

  4. Skriv enhetstester för att testa dina egna klasser och funktioner.

  5. Försök även få med kod i config/ så att den omfattas av din kodtäckning och du kan visuellt se hur väl dina testfall täcker även de filerna.

  6. Försök nå 100% kodtäckning av all din kod. Om du inte lyckas med det så försöker du nå så hög kodtäckning som du anser vara rimligt med skäliga medel.

#Publicera

  1. När du är klar, kör make test för att köra alla testerna mot ditt repo. När man kör make test så bör det passera utan allvarliga felmeddelanden.

  2. Dubbelkolla att webbplatsen fungerar på studentservern genom att göra en dbwebb publishpure me och testköra den.

  3. Committa alla filer till ditt repo och lägg till en ny tagg (3.0.*). Öka versionnumret om du lägger till ändringar (3.0.1, 3.0.2 och så vidare). Rättaren kommer normalt sett att använda din senaste tagg som är >= 3.0.0 och < 4.0.0.

  4. Pusha upp repot till GitHub/GitLab, inklusive taggarna.

#Extrauppgift

Lös följande extrauppgifter om du har tid och lust.

  1. Försök få med filerna i katalogen view/ så att de omfattas av rapporten för kodtäckning. Det räcker att du uppdaterar PHPUnits konfigurationfil .phpunit.xml för att inkludera katalogen i rapporten.

  2. Fundera ut om det är möjligt att enhetstesta templatefilerna och om det finns någon fördel med det. Skriv ett par enhetstester för dina templatefiler och se hur det känns. Du kan antingen inkludera dem direkt, eller inkludera dem via funktioner likt renderView() så kan de blir enklare att testa.

#Tips från coachen

Gör små commits och committa ofta. Använd tydliga committ-meddelanden så att historiken ser bra ut.

Kör ofta make test för att dubbelkolla att inga valideringsfel smyger sig in i koden.

Lycka till och hojta till i chatt och forum om du behöver hjälp!

#Revision history

  • 2021-04-13: (A, mos) Första utgåvan.

Document source.

Category: kurs mvc.