Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Pytest a unittest: co zvolit pro testování v Pythonu

From CrabCodex

Jak se vyhnout začátečnickým nástrahám při prvním zaměstnání První pracovní dny jsou o hlídání si vlastního tempa. Když něčemu nerozumíte, nečekejte hodiny a ptejte se kolegů. Než se ale zeptáte, zkuste problém vygooglit nebo si přečíst dokumentaci. Typická chyba je ticho a pasivita – naopak se vyplatí komentovat, co zrovna děláte, i když jde o drobnost. Většina týmů raději vysvětlí, než aby opravovala chyby, které vznikly z domnělých předpokladů.

Jak strukturovat testy a využít fixtures Když potřebujete připravit data nebo prostředí, použijte fixtures. Jsou to funkce s dekorátorem @pytest.fixture, které vrací hodnotu nebo objekt. Například

Nebojte se požádat o zpětnou vazbu po prvních týdnech. Zeptejte se, co konkrétně byste měli zlepšit – ať už jde o styl kódu, komunikaci nebo používání verzovacího systému. Naopak se vyhněte srovnávání s ostatními a přehnaným nárokům na sebe. Kód, který napíšete za měsíc, nebude dokonalý, a to je v pořádku. je, abyste se z každé chyby učili a dělali ji jen jednou.

Nakonec si osvojte práci s promisemi a async/await. Async/await je syntaktický cukr nad promisemi, ale výrazně zjednodušuje čtení asynchronního kódu. Místo řetězení `.then()` píšete sekvenční kód s `await`. Chyby ale musíte ošetřit pomocí `try/catch` – pokud await selže a nemáte catch, aplikace spadne. Nezapomeňte, že `await` funguje pouze v async funkcích, takže pokud ho potřebujete na nejvyšší úrovni v modulu, použijte tzv. top-level await (v moderních prohlížečích a Node.js). Pozor na paralelní volání: pokud na sobě nezávisí, použijte `Promise.all`, jinak čekáte sekvenčně a zbytečně prodlužujete dobu běhu.

Automatizace testů má smysl, ale musí být udržovatelná. Pište testy tak, aby nebyly závislé na konkrétních textových prvcích, které se často mění. Používejte stabilní identifikátory, jako jsou testovací ID nebo jedinečné atributy. Pokud testy začnou častěji selhávat kvůli změnám v UI než kvůli skutečným chybám, je to signál, že jsou testy špatně napsané. Pravidelně je revidujte a odstraňujte ty, které nepřinášejí žádnou hodnotu.

Začněte tím, že si rozdělíte testy na unit testy, integrační testy a end-to-end testy. Unit testy ověřují logiku jednotlivých funkcí, integrační testy kontrolují spolupráci mezi komponentami a end-to-end testy procházejí celou uživatelskou cestou. Pro každou vrstvu použijte jiný nástroj, ale dbejte na to, aby se testy daly spouštět automaticky. Ruční testování si nechte až na závěrečnou fázi, kdy potřebujete objevit neočekávané chování, které automatizace nezachytí.

assert 1 + 1 == 2Nemusíte psát třídy ani dědit z nějaké základny – stačí funkce a assert. Tento minimalismus je hlavní výhodou oproti unittestu. Při psaní testů se vyplatí mít každý test nezávislý a zaměřený na jednu konkrétní funkcionalitu. Pokud test selže, okamžitě víte, co je rozbité

Na co se zaměřit při testování na reálných zařízeních Emulátory jsou užitečné pro rychlé ověření základní funkčnosti, ale nikdy nenahradí reálné zařízení. Problémy s pamětí, baterií nebo teplotou se na emulátoru neprojeví. Pokud testujete na fyzickém telefonu, zapněte si sledování výkonu a sledujte vytížení procesoru, paměti a síťovou aktivitu. Typická chyba je testovat aplikaci pouze na Wi-Fi. Přepněte se na mobilní data a vyzkoušejte, co se stane, když signál ztratíte nebo zeslábne uprostřed požadavku.

Co si pohlídat při přechodu z ES5 na ES6+? Nejprve si osvojte `let` a `const` místo `var`. `var` má funkční, ne blokový rozsah, což vede k nečekaným hodnotám ve smyčkách nebo podmínkách. Používejte `const` pro hodnoty, které se nemění, a `let` pro proměnné, které měníte. Vyhněte se `var` úplně – i když to vyžaduje změnu návyku, výsledný kód je čitelnější a předvídatelnější. Typická chyba: deklarujete proměnnou uvnitř `if` a pak ji čtete venku – s `var` to projde, ale s `let` dostanete chybu, která vás ochrání před logickou chybou.

Pro práci s poli a objekty jsou klíčové metody jako `map`, `filter` a `reduce`. Místo `for` smyček s vedlejšími efekty použijte `map` pro transformaci a `filter` pro výběr. `reduce` je mocný, ale i zrádný – pokud zapomenete inicializační hodnotu, chová se jinak, než čekáte. Nezapomínejte, že tyto metody nevytvářejí hlubokou kopii – mění pouze prvky, ale vnořené objekty zůstávají sdílené. Pro immutabilní aktualizace použijte spread operátor: `const novyPole = [...pole, prvek];` nebo `const novyObjekt = ...objekt, key: value ;`. Tím se vyhnete mutaci původních dat – klíčové pro React nebo jiné frameworky, které spoléhají na referenční porovnání.