Theory of Unit Testing, del 3

Under de senaste två artiklarna har vi tittat på teorin bakom enhetstestning och hur det kan hjälpa oss i vår WordPress-utvecklingsinsats. Vi har definierat enhetstestning och granskat olika sätt att det kan hjälpa oss genom hela våra projekt.

Men vi har fortfarande mer att täcka.

I den här sista artikeln kommer vi att granska varför vi ens borde störa enhetstestning och vi sammanfattar fördelarna och nackdelarna med att göra det. Därefter tittar vi på hur vi kan ompröva testningen i våra befintliga projekt. Och för att paketera upp, sammanfattar vi en lista med resurser som är tillgängliga specifikt för oss WordPress-utvecklare som kommer att hjälpa till att börja testa våra teman.


Varför vi Enhetstest: Allt om kvalitet

Det övergripande temat för hela serien har handlat om varför vi borde störa enhetstestning, men om det inte har varit kortfattat sagt, är det därför:

Enhetstestning hjälper oss att upptäcka problem tidigt, ge utvecklare en nivå av självdokumentationskod och ger oss en högre kvalitet på programvara.

Beviljas, förutsätter detta att vi följer igenom på att utöva goda testtekniker. Det här förstod naturligtvis i detalj i den föregående artikeln, men det är värt att upprepa.

En viktig sak att notera - speciellt om du försöker tillämpa detta i en mer företagsinställning eller i samband med ett större företag - är det att testning av enheter inte bara är något som utvecklare gör för sig själva. Kvaliteten är dubbelsidig - det gynnar kunden och det gynnar verksamheten.

Genom att tillhandahålla en högre kvalitetsnivå för kunden, det vill säga mer noggrant testad programvara, borde de uppleva färre buggar. Eftersom buggar resulterar i att utvecklare måste spendera lösningar i stället för att arbeta på nya projekt eller nya funktioner hos befintliga produkter, kan detta i slutändan spara pengar.

Genom att ge en högre kvalitetsnivå för verksamheten är utvecklare säkrare i sina ansträngningar eftersom de kan genomföra en testpaket varje gång en förändring görs och att veta hur deras arbete påverkar hela applikationen. Om ett test misslyckas, kan de lösa det innan de distribueras till produktion.

Enhetstester handlar om kvalitet och det påverkar inte bara de som skriver koden, men det företag som levererar det och de kunder som använder det också.


Fördelar och nackdelar

Sanningen är att vi redan har täckt fördelarna med enhetstestning. För fullständighet, låt oss sammanfatta dem här (även om du alltid kan granska dem i detalj!). Enhetstestning ...

  • Hjälper utvecklare att hitta problem tidigt och kan spara tid när applikationen växer och nya funktioner introduceras
  • Ger en nivå av dokumentation i koden så att nuvarande och framtida utvecklare kan förstå hur koden ska fungera
  • Drivs arkitektur så att applikationen kan testas under hela dess livscykel
  • Förbättrar språket i koden genom att tillhandahålla mer läsbara funktioner och kontrollflöde

Alla låter bra, eller hur? Och ja, det beror på att utvecklare håller sig ansvariga för höga standarder och praxis när det gäller att faktiskt genomföra detta i det dagliga arbetet, men testning av enheten är inte utan dess nackdelar.

Tiden är pengar och du spenderar tid

Detta har sagts i hela serien: enhetsprovning tar en betydande tid investering. Visserligen, om du startar ett nytt projekt är tidsinvesteringen mycket lägre än om du anpassar detta till en befintlig applikation, men du är fortfarande måste skriva mer kod än utan testning.

Eftersom du skriver mer kod tar du mer tid - igen, på projektets främre del. Fördelarna med enhetstestning kommer ofta inte förrän senare, men om ett projekt har ett specifikt måldatum för utgåva och den här utgåvan innehåller ett visst antal funktioner är det inte troligt att du passar alla enhetstest och funktionerna i frisättningen.

Om du vill undvika mindre funktionssätt vid släpp eller fördröjda måldatum, ska du ha att bygga in tid för enhetstestning.

Komplexitetsdöd och andra kliches

Du har hört dem alla: komplexitet dödar, håll det enkelt dumt, mindre är mer och så vidare.

Ärligt talat är alla dessa sanna och de har sin rätta plats i utveckling, men faktum är att enhetsprovning är ytterligare kod och tilläggskod alltid introducerar mer komplexitet. Som sådan måste vi se till att vi har ett ordentligt sätt att hantera och organisera alla våra testsatser.

Kanske är det filorganisation eller namnavstånd, eller namngivningskonventioner, eller versionsversioner eller alla ovanstående. Oavsett det du slutar göra, bör enhetstester inte behandlas som andraklassiga medborgare i mjukvarans värld - de bör omfattas av samma designprinciper som andra klasser eller funktioner så mycket som möjligt.

Designens nackdel

Ja, i den senaste artikeln sa vi att enhetstestning kan hjälpa till att driva utformningen av en applikation och det kan hjälpa till att skapa en design som gör hela applikationen mer testbar. Detta är fortfarande sant, men det kommer på bekostnad: ibland är den mest enhetliga testbara designen inte den klaraste.

Därför menar jag att eftersom en uppsättning funktioner - eller till och med en klass - är helt testad, kan sammanhållningen komma att äventyras, eftersom vi gör offer för att få tillgång till vissa funktioner för att verifiera deras behandling av data. Det här är självklart inte en hård och snabb regel, och det kan inte ens vara ett problem för någon, men du måste bestämma vad du ska vara dogmatisk om: är det en perfekt konstruerad uppsättning klasser och eller funktioner eller ett sammanhängande system av test och funktioner som fungerar tillsammans?

I slutändan tror jag att det kommer ner på hur du ser test som en större del av det hela. Om de ingår i din ansökans design, kan det hända att designen inte lider. Men om du tittar på tester som en eftertanke, kan designen av kärnanvändningen äventyras bara lite.

Kontinuerlig Tweaking

Som de säger är programvara aldrig gjort och eftersom enhetstestning är en del av ett program, är det aldrig gjort.

Eftersom en applikation alltid kommer att utvecklas - oavsett om det är buggar som är squashed, nya funktioner introduceras (eller till och med borttagna), kommer de associerade testen att behöva läggas till eller uppdateras också. Och det kommer alltid tillbaka till tiden.

Om du arbetar i ett team av utvecklare kan vår brist på uppdateringstest negativt påverka laget eftersom resultaten som testrapporten kan vara falska positiva eller falska negativa. När test har skrivits är det absolut nödvändigt att de uppdateras. annars kan de resultera i en mycket dålig produkt.


Innehåller enhetsprovning i ditt arbetsflöde

Enhetstestning är mycket enklare att sälja när du börjar med ett projekt, men om du vill omforma det till en befintlig applikation (eller tema eller plugin, i vårt fall), kommer det att ta lite tid och ansträngning.

Och även om det inte finns något silverkula för hur du perfekt kan genomföra det här, finns det några bra sätt att börja genomföra praktiken i ditt dagliga arbete:

  • Se till att ditt projekt är under källkontroll - Detta borde vara en given, men om det inte är så kom igång så snart som möjligt. "hur är och varför är"ligger utanför ramen för denna artikel, men det är viktigt att ha ditt arbete under källkontroll, speciellt när du introducerar test.
  • Introducera WordPress Unit Tests - Hämta installationsprogrammet med WordPress Unit Tests (instruktioner här). Jag rekommenderar att du håller dem i en undermapp i ditt projekt för att lättare kunna ordna testen. Se till att de blir engagerade i källkontroll.
  • Börja lägga till test - Varje gång du arbetar på en funktion eller introducerar en ny funktion, lägg till ett motsvarande enhetstest. Om en existerande funktion inte kan testas, spendera du tiden för att se till att den är. Detta är ett uppförsbacke, men det kommer löna sig.
  • Kom ihåg framgång och misslyckande - Kom ihåg att medan du skriver test måste du också introducera test för framgångssaker och test för misslyckanden också.

Om du följer ovanstående steg kommer du slutligen att sluta med en betydande mängd koddekning. Ja, det tar tid och ja du kommer sannolikt att behöva omarbeta en hel del koden, men så mycket kommer investeringen att ge utdelning i framtiden för din produkt.


Tillgängliga resurser

Här är en sammanfattning av resurserna som kan bidra till framgångsrik testning av dina WordPress-baserade projekt:

  • Nybörjarens guide till provning av enheter - En serie artiklar som jag skrev introducerar enhetstestning och hur man testar plugins och teman.
  • PHPUnit - Ramverket som WordPress-testen bygger på.
  • PHPUnit-dokumentation - Handboken för PHPUnit. Detta är användbart för när du letar efter tillgängliga metoder för att skriva påståenden i din kod.
  • Hej läsare - En enkel plugin som jag skrev för att visa hur man testar plugins.
  • WordPress-test - De officiella WordPress-testen och testramen finns tillgängliga för utcheckning via Subversion.
  • Grundläggande tema - En enkel WordPress-tema används för att visa hur man testar teman i enhetsenhet.

Mellan den första serien av artiklar och denna serie artiklar har en stark grund lagts på som du kan fortsätta bygga din testningspraxis för enhet.