Když už víte, co dělat, vyhněte se častým nástrahám. Nepište integrační testy na všechno, co se dá – to vede k monstrózní sadě, kterou nikdo nechce spouštět. Nepoužívejte testovací databázi v paměti, pokud produkční používá jinou – rozdíly v chování vás překvapí. A nepodceňujte údržbu testovacích dat. Pokud integrační test vyžaduje složité nastavení předem, je lepší ho rozdělit na menší celky nebo nahradit kontraktním testem.
Při zavádění pyramidy se vyhněte dvěma extrémům. První je snaha pokrýt absolutně všechno testy — to vede k tomu, že strávíte více času údržbou testů než vývojem funkcí. Druhý extrém je testovat jen to, co je zrovna v módě, nebo co umíte. Dobrým kompromisem je nastavit si firemní směrnici: jednoduché funkce bez rizika nemusí mít testy vůbec, ale kritické výpočty a platební toky ano. Pak se vyplatí investovat do měření pokrytí, ale ne na úrovni řádků — sledujte pokrytí větví a rozhodovacích podmínek.
Základní pravidlo zní: jednotkové testy pište pro logiku, kterou lze spustit bez okolního světa. Pokud testujete výpočet ceny, transformaci dat nebo rozhodovací podmínku, nepotřebujete databázi ani HTTP volání. Právě tady se vyplatí maximální rychlost a izolace. Typická chyba spočívá v tom, že vývojář vytvoří mock pro každou závislost a test pak jen opisuje implementaci. Takový test sice projde, ale při změně chování se často musí přepsat celý, a přitom neodhalí nic, co by neodhalil prostý refaktoring.
Častou chybou je spoléhat se na nástroje bez kontroly. Před každým refaktoringem si udělejte zálohu (např. commit do verzovacího systému) a po operaci spusťte testy. IDE sice nabízí náhled změn (často v panelu Find), ale ne vždy je přehledný, zvlášť u velkých projektů. Také si dejte pozor na refaktoringy, které mění viditelnost nebo signaturu – mohou ovlivnit kód mimo aktuální soubor. Vždy zkontrolujte, zda operace nezasáhla i soubory, které jste nečekali. Pokud máte kód s chybami, IDE často odmítne refaktoring spustit – to je signál, že je třeba napravit nejprve chyby.
Psát testy bez promyšlené struktury připomíná stavbu domu bez projektu: ze začátku to vypadá nadějně, ale s každou další funkcí se začnou objevovat praskliny. Testovací pyramida není dogma, ale praktický nástroj, který vám pomůže rozhodnout, kam investovat čas a úsilí. Základní princip je jednoduchý: čím nižší vrstva, tím rychlejší a levnější testy, a proto jich má být nejvíce. Na vrcholu pyramidy stojí testy pomalé a drahé, kterých by mělo být minimum.
Odhad času patří k nejobtížnějším činnostem v softwarovém vývoji. Nejedná se o věštění z křišťálové koule, ale o systematickou práci s informacemi, které máte k dispozici. Pokud zvládnete pět základních principů, výrazně snížíte riziko, že termín nesplníte. Klíčem je přestat odhadovat na základě pocitů a začít odhadovat na základě dat a struktury.
V praxi to znamená, že většinu testů píšete na úrovni jednotek — malé a izolované testy, které ověřují jednu třídu nebo funkci. Nad nimi jsou integrační testy, které kontrolují spolupráci mezi komponentami, a na vrcholu end-to-end testy procházející celou aplikací. Typická chyba začátečníků je obrátit pyramidu vzhůru nohama: spoléhat se hlavně na UI testy, které jsou pomalé, křehké a při sebemenší změně selektoru selhávají. Výsledkem je sada testů, která běží hodiny a většinu času jen křičí falešné poplachy.
Během práce na projektu se vyplatí pravidelně ukládat a zálohovat. B3du umí pracovat s automatickými verzemi, ale spoléhat se pouze na ně je riskantní. Zvlášť když pracujete s velkými soubory, může dojít k chybě. Zkuste si vytvořit vlastní systém verzí: každou důležitou fázi uložte pod novým názvem. Tím se vyhnete situaci, kdy přijdete o hodiny práce jen kvůli jednomu špatnému kroku. A pokud se něco pokazí, nepropadejte panice — podívejte se do dočasných souborů, často tam najdete poslední funkční verzi.
Další past, do které se snadno spadnete, je testování vnitřních implementací. NUnit umožňuje testovat privátní metody přes reflexi, ale to je téměř vždy špatně. Testujte chování z pohledu volajícího, ne vnitřní mechanismy. Pokud potřebujete otestovat privátní logiku, znamená to, že je pravděpodobně příliš složitá a měla by být extrahována do samostatné třídy. V opačném případě budete psát křehké testy, které se rozbijí při každé změně implementace, a to i když se vnější chování nezmění. To vede k frustraci a k tomu, že testy začnete ignorovat.
U integračních testů se zaměřte na hranice systému: přístup k datům, komunikaci s externími službami a serializaci. Používejte skutečnou databázi, ideálně stejnou, jakou běží v produkci, ale s oddělenými testovacími daty. Nepodvádějte s transakcemi, které se po testu rollbackují — to sice zrychlí běh, ale neodhalí problémy s únikem spojení nebo s čistěním dat. Pro end-to-end testy vyberte jen ty nejdůležitější uživatelské cesty, třeba registraci, objednávku nebo úhradu. Více než deset takových testů začíná být neudržitelných.
If you beloved this article and you would like to be given more info regarding přečtěte si více nicely visit the webpage.
