Refaktorering för testbarhet i C++
I detta webinar kommer vi att prata om svårtestade mönster i C++ och visa hur man refaktorerar dem. Det svåra i sammanhanget är inte själva kodens naturliga komplexitet.
Mjukvara som har många grenar eller försöker lösa ett problem som måste följa en viss uppsättning invecklade företagsregler, kommer vi inte ta upp. Alla exempel är faktiskt ganska enkla.
Fokus kommer att ligga på mönster som är tekniskt svåra att unittesta, t.ex. på grund av att de
-
Kräver att irrelevant kod också testas
t.ex. tredjepartsbibliotek, klasser (andra än den som testas)
-
Fördröjer utförandet av testerna
t.ex. sleeps inuti koden under testning
-
Kräver att invecklade strukturer kopieras eller skrivs från grunden
t.ex. fakes som innehåller mycket logik
-
Kräver att testuppgifter inkluderas i produktionskoden
t.ex. #ifdef UNIT_TESTS
-
Ändrar och/eller är beroende av körmiljön
t.ex. skapar eller läser från filer
Man kan skriva testbar kod som kan verifieras med små och självständiga tester. Man ska inte behöva testa orelaterad logik eller implementera komplex funktionalitet bara för att kunna testa. Unittester ska trots allt vara roliga och ge den snabba feedback du behöver för att kunna utveckla utan att hela tiden oroa dig för att "förstöra" någonting.
Med införandet av ett mer funktionsrikt testramverk, dependency injection containers och så vidare, kan det finnas sätt att komma runt bristen på testbarhet i de här exemplen. Med det sagt, är det bra att veta hur man refaktorerar dem enligt bästa praxis inom objektorienterad design samt riktlinjerna för C++ Core. Vi illustrerar detta genom att endast förlita oss på det väladapterade [GoogleTest]-ramverket
För hänga med ordentligt på det här seminariet, bör du känna till
-
C++
-
Objektorienterad design
-
Unittestning och mocking