Kmom03: Enhetstestning

By . Latest revision .

Vi jobbar vidare med klasser och objekt och denna gången tittar vi på hur klasser kan enhetstestas med verktyget PHPUnit. PHPUnit är ett av de verktyg som vanligen används inom PHP för att utföra enhetstestning av koden.

Vi har tidigare pratat om begreppet inkapsling och att klasserna skall erbjuda ett publikt API, ett gränssnitt för användaren av klassen. Samtidigt vill vi skydda den interna implementationen inuti klassen. Vi vill låta användaren av vår klass ha ett tydligt gränssnitt, men inuti klassen vill vi själva bestämma hur vi implementerar klassens detaljer, utan att påverka/påverkas av det publika gränssnittet.

Liknande begrepp använder vi i enhetstestning. Vi ser varje klass som en enhet som skall testas och vi testar klassen via dess publika gränssnitt vilket är de metoder vi når som användare av klassen, dess publika metoder. När vi testar så är vi fullt medvetna om hur klassen är uppbyggd. Vi kallar det för white box testing, vi har tillgång till klassens källkod när vi skriver testfallen och vi vet exakt den källkod vi skall testa. Målet är att testa alla varianter av användning mot klassen, även felfall.

Enhetstestning med PHPUnit via en Makefile.

Enhetstestning med PHPUnit via en Makefile.

Kodtäckning vid enhetstestning, en översikt av enheterna (klasserna).

Kodtäckning vid enhetstestning, en översikt av enheterna (klasserna).

Detaljerad kodtäckning rad för rad i en enhet (klass).

Detaljerad kodtäckning rad för rad i en enhet (klass).

Detta är instruktionen för kursmomentet och omfattar cirka 20 studietimmar. Fokus ligger på uppgifter som du skall lösa och redovisa. För att lösa uppgifterna behöver du normalt jobba igenom övningar och läsanvisningar för att skaffa dig rätt kunskap och förståelse av uppgiftens alla delar. Läs igenom hela kursmomentet innan du börjar jobba.

#Labbmiljö

(ca: 1-2 studietimmar)

Installera följande som en del av din labbmiljö.

  1. Installera Xdebug för att kunna köra enhetstester med kodtäckning på din lokala maskin.

    1. Om du är på Mac kan du vara behjälpt av att installera “PHP i terminalen” och “Xdebug” via pakethanterare Brew, för detaljer se “Installera Xdebug på Mac OS med XAMPP/brew”.

#Uppgifter & Övningar

(ca: 10-14 studietimmar)

Uppgifter skall utföras och redovisas, övningar är träning inför uppgifterna.

#Uppgifter

Följande uppgifter skall utföras och resultatet skall redovisas.

  1. Lös uppgiften “Enhetstesta dina klasser med PHPUnit”.

#Övningar

Jobba igenom övningarna, de förbereder dig inför uppgifterna.

  1. Det finns en tutorial “Get going with phpunit” i ditt kursrepo under example/phpunit som hjälper dig att komma igång med phpunit och enhetstestning. Jobba igenom den och försök nå 100% kodtäckning och samtidigt lära dig grunderna i enhetstestning.

#Läs & Studera

(ca: 2-4 studietimmar)

För att lösa uppgifterna och redovisningen bör du studera enligt följande.

#Föreläsning

Titta igenom följande föreläsningar.

#Introduktion till området “Software Testing”

Om “software testing” och ingenjörsprocessen att utföra testning.

Slides till föreläsningen “Introduktion till området ‘Software Testing’”.

Introduktion till området ‘Software Testing’ (med Mikael).

#Introduktion till området “Software Unit Testing”

Fortsättning med objekt och klasser i PHP. Vi studerar konstrukturer för arv, komposition, interface och trait. Vi pratar också om hur man skall tänka när man kodar objektorienterat och vad som är god kodsed och riktlinjer när man designar och implementerar sina klasser.

Slides till föreläsningen “Introduktion till området ‘Software Unit Testing’”.

Introduktion till området ‘Software Unit Testing’ (med Mikael).

#Litteratur

  1. I dokumentet PHP The Right Way, finns en sektion som berör testning i PHP. Läs igenom den.

  2. Bekanta dig med PHPUnits dokumentation. Kika över innehållsförteckningen och skumläs snabbt följande kapitel (för att bekanta dig med manualens struktur och innehåll. Du kommer behöva gå tillbaka till manualen, senare när du skriver dina testprogram. Det är via manualen du kan lära dig allt som du behöver veta om enhetstester med phpunit.

      1. Writing Tests for PHPUnit
      1. The Command-Line Test Runner
      1. Fixtures
      1. Organizing Tests
      1. Code Coverage Analysis
    • Appendix 1. Assertions

#Resultat & Redovisning

(ca: 1-2 studietimmar)

Läs instruktionen om hur du skall redovisa. Observera att denna kursen skiljer sig från hur du normalt sett lämnar in din redovisningstext.

Se till att följande frågor besvaras i texten i din rapport:

  • Berätta hur du upplevde att skriva kod som testar annan kod med PHPUnit och hur du upplever phpunit rent allmänt.

  • Hur väl lyckades du med kodtäckningen av din kod, lyckades du nå mer än 90% kodtäckning?

  • Upplever du din egen kod som “testbar kod” eller finns det delar i koden som är mer eller mindre testbar och finns det saker som kan göras för att förbättra kodens testbarhet?

  • Valde du att skriva om delar av din kod för att förbättra den eller göra den mer testbar, om så berätta lite hur du tänkte.

  • Fundera över om du anser att testbar kod är något som kan identifiera “snygg och ren kod”.

  • Vilken är din TIL för detta kmom?

#Resurser bra-att-ha

Här anges övriga resurser som kan användas för vidare studier i det som kursmomentet omfattar.

#Om Software Testing

Följande resurser används i olika omfattning i samband med föreläsningen “Introduktion till området “Software Testing”“.

För att läsa mer allmänt om test av mjukvara så kan Wikipedia vara en grov startpunkt via följande sidor.

Om du fattade intresse för SWEBOK så finns resurserna här.

#Om Software Unit Testing

Följande resurser används i olika omfattning i samband med föreläsningen “Introduktion till området “Software Unit Testing”“.

#PHPUnit

När det gäller phpunit så är bland annat följande resurser intressanta att ha koll på.

För att kodtäckningen skall fungera behöver du installera Xdebug.

#Arkiv

En introduktionen till enhetstester och enhetstestning ges i artikeln “Enhetstestningens roll i test av mjukvara”. Denna artikeln kan anses ersatt av de båda föreläsningarna om test och ligger med här enbart av kuriosa skäl.

#Git och skriva bra commits

Det kan vara en konst att skriva bra commit-meddelande så att man får en bra historik när man tittar på koden via ens commits.

I artikeln ovan refereras till Linux kärnan och repon skrivna av Tim Pope som bra exempel på commit-historik. Följande länkar leder till den typen av exempel.

#Revision history

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

Document source.