dbwebb-se / mvc

Course repo for the mvc and object orientation in frameworks course - mvc.
Other
1 stars 4 forks source link

Hur använder man PHPUnits inbygga metoder för att mocka en Dice i en DiceHand? #31

Open mosbth opened 3 years ago

mosbth commented 3 years ago

Någon som kan föreslå/länka till ett exempel på hur man kan "mocka" funktioner i medlemsklassen. Exempel: Jag vill kontrollera svaret från dice->roll till diceHand.

Jag har redan kollat/läst det men jag tycker inte det är särskilt väl förklarat och ser inte att är faktiskt tillämpbart för det jag önskar uppnå. Exemplet är rätt så abstrakt och generellt förklarat utan att visa konkret hur det görs. Det jag hade hoppats på är ett konkret exempel som man kan utgå ifrån. I exemplet 8.2 demonstreras hur man kan mocka beteende av den ägande klassens funktioner men det är inte riktigt vad jag är ute efter för metoderna i exempelvis DiceHand jag vill testa hämtar värdena från metoder i Dice-objekt. Att mocka en funktion i den ägande klassen hjälper mig inte så mycket för dessa är inte involverade i funktionen som skall testas. I alla fall är det så jag uppfattar exemplet. Nu när jag har läst ännu en gång ser jag i 8.11/8.12 något som i kombination med 8.2 är nog det jag är ute efter.

Stycket som hanterar detta i PHPUnit manualen är "Chapter 9. Test Doubles".

Vi tar inte upp mock i kursen, men varje gång man pratar om enhetstester och börjar använda dem så hamnar man i liknande bekymmer. Man behöver "peta på" vissa klasser för att underlätta skrivandet av enhetstester och höja kodtäckningen av svåra passager i koden. Jag kommer starkt överväga att ta med detta i framtida kurser där vi pratar enhetstestning.

Jag satte ihop ett kodexempel, utifrån det som manualen visar. I mitt exempel visar jag hur man mockar en Dice-klass och dess olika metoder så att den upplevs att alltid returnerna en 6:a.

Kodexempelt finns i kursrepot under example/phpunit-mock och det är beskrivet i README-filen hur man kommer igång och kör exemplet.

En viktig sak i exempel-koden är att Dice injectas i DiceHand. Det är den konstruktionen som gör det möjligt att injecta en mockad Dice klass in i DiceHand.