Typickou pastí je také špatné použití atributu [TestCase], který umožňuje parametrizované testy. Zapomíná se na to, že parametrem může být pouze konstanta nebo atributově zapsaná hodnota, ne objekt nebo výraz. Pokud potřebujete předat složitější data, použijte [TestCaseSource] s metodou, která vrací IEnumerable. Tím získáte čitelný a snadno rozšiřitelný testovací scénář.
Odhad časové náročnosti analytických fází a implementace patří v agilních týmech k nejvíc podceňovaným dovednostem. Nejde o to, abyste trefili přesný počet hodin, ale abyste vytvořili realistický rámec, který tým zvládne bez zbytečného přetížení. Základní chybou bývá, že se odhaduje pouze kód, zatímco analýza, revize a případné změny se zapomínají. Přitom právě analýza často rozhoduje o tom, jestli implementace proběhne hladce, nebo se utopí v množství doplňujících otázek.
Když testy začnou bolet: časté chyby a jejich řešení Nejčastější chybou bývá testování soukromých metod nebo závislost na externích zdrojích, jako je databáze nebo souborový systém. Místo toho se zaměřte na veřejné rozhraní a izolujte závislosti pomocí rozhraní a falešných implementací (například s knihovnou Moq). Vyhnete se tak pomalým a nestabilním testům. Další problém nastává, když testy sdílejí stav – pokud jedna testovací třída mění statické proměnné, může to ovlivnit výsledky jiných testů. Používejte atribut [SetUp] pro inicializaci čerstvých dat před každým testem.
Při psaní testů se vyhněte tomu, abyste testovali implementaci, ne chování. Netestujte, jestli byla volána určitá metoda uvnitř reduceru, ale testujte, jaký je výsledný stav. U async akcí zase netestujte, jakým způsobem byla data získána, ale testujte, jaké akce se dispatchují a v jakém pořadí. Tento přístup dělá testy odolné vůči refaktoringu a zajišťuje, že testujete skutečnou funkčnost.
Dalším zásadním bodem je zálohování. Mnoho vývojářů se spoléhá na pravidelné plné zálohy, ale zapomíná na test obnovy. Bez ověření, že se ze zálohy skutečně dokážete vrátit do provozuschopného stavu, je záloha jen iluze. Naplánujte si nejen četnost záloh, ale také jejich uchovávání – staré zálohy zabírají místo a mohou obsahovat zastaralou strukturu, která už neodpovídá aktuálnímu schématu. Ideální je kombinace plných a inkrementálních záloh, s automatizovaným testem obnovy alespoň jednou za měsíc.
Než začnete psát jakýkoliv dotaz, ověřte si, jakou verzi databázového enginu skutečně používáte. Rozdíl mezi verzemi může být zásadní – ať už jde o podporované typy indexů, optimalizaci dotazů, nebo chování při transakcích. Typickou chybou je spoléhat na to, že „to, co funguje v SQLite, poběží stejně i v PostgreSQL”. Převod mezi systémy vyžaduje důkladný test, ne jen překopírování kódu. Pokud plánujete migraci, začněte s malou částí dat a porovnejte výkon i výsledky dotazů.
Jak předejít nejčastějším problémům s výkonem a stabilitou Výkon databáze se nejčastěji láme na špatně navržených indexech. Než přidáte nový index, sledujte, které dotazy se skutečně opakují a které jsou pomalé. Příliš mnoho indexů zpomaluje zápis, takže každý index musí mít své opodstatnění. U složených dotazů se vyplatí indexovat sloupce v pořadí, v jakém se používají ve WHERE klauzuli – ale pozor na to, že se to může lišit podle konkrétního dotazu. Používejte nástroje pro analýzu plánů dotazů, které vám ukážou, kde se ztrácí čas, a podle toho upravte schéma.
Další častá chyba spočívá v tom, že se testuje pouze šťastná cesta. Zkuste otestovat i situace, kdy API vrací chybu, nebo kdy je požadavek zrušen. Vytvořte si mock, který vyvolá výjimku, a ověřte, že se dispatchuje správná akce pro chybu. Tímto způsobem získáte jistotu, že vaše aplikace korektně reaguje i na neočekávané stavy. Nezapomeňte také testovat, že se async akce nedispatchuje vícekrát, než je potřeba, což je častý zdroj duplicitních požadavků v UI.
Jak na to: od reducerů po async thunky Pro reducer vytvořte test, kde definujete počáteční stav, akci a očekávaný nový stav. Jako příklad si vezměte reducer pro přidání položky do seznamu. V testu zavoláte reducer se stavem, který obsahuje prázdné pole, a akcí s novou položkou. Ověříte, že výsledné pole má délku jedna a obsahuje správnou položku. Tento přístup je deterministický, nemusíte nic mockovat a test běží v řádu milisekund.
První test obvykle vypadá jako veřejná třída s atributem [TestFixture] a jednotlivé metody s atributem [Test]. Uvnitř metody používáte Assert.That s různými constrainery, například Is.EqualTo, Is.True nebo Is.Empty. Důležité je psát testy tak, aby byly deterministické – neměly by záviset na datumu, náhodných hodnotách nebo pořadí provedení. Pokud potřebujete testovat výjimku, použijte Assert.Throws(() => metoda(…)). Tím ověříte i typ výjimky, ne jen to, že něco spadlo.
If you have any concerns pertaining to the place and how to use úPrava InteriéRu, you can make contact with us at the website.
