Pytest vs unittest: který přístup k testům zvolit

Z Mazovia

První projekt nezakládej jako prázdnou aktivitu, ale použij předpřipravenou šablonu s jednou obrazovkou. Uvidíš tak strukturu souborů a nebudeš muset řešit, co kam patří. Hned na začátku si zvykni na oddělení logiky od vzhledu. Layout patří do souborů s rozvržením, chování do kódu. Když to budeš míchat, později narazíš na nečitelný kód a problémy při změnách. První aplikaci omezte na jednu obrazovku s jedním tlačítkem a jedním textovým polem. Zjistíš, jak se data předávají a jak se mění stav.

Pull request jako místo, kde se rozhodu

Změna signatury metody je další častý refaktoring. Použijte Change Signature, kde přidáte, odeberete nebo přeuspořádáte parametry. IDE upraví všechna volání, včetně těch v testech. Pozor na výchozí hodnoty a přetížené metody: náhled změn vždy projděte, protože automatické úpravy nemusí odpovídat zamýšlenému chování. Pokud si nejste jistí, udělejte změnu po menších krocích a po každém spusťte testy.

Refaktorování často skončí jako ruční přepisování, při kterém se snadno zapomene na okrajové případy. Přitom většina moderních IDE nabízí nástroje, které stejnou práci zvládnou rychleji a bezpečněji. Klíčem je vědět, které funkce použít a kdy. Nejde o hromadné přejmenování všeho, co najdete, ale o cílené zásahy s okamžitou kontrolou.

Základem je dodržet strukturu, kterou zvládne přečíst člověk i nástroj pro procházení historie. První řádek pište v rozkazovacím způsobu a kratce: „Oprav datum u faktury za prosinec". Do 50–72 znaků se vejde téměř vždy. Pokud potřebujete víc, dejte po prvním řádku prázdný řádek a teprve pak rozveďte podrobnosti – co bylo špatně, co jste změnili a proč zrovna takto.

Před každým větším refaktoringem mějte čistý stav v systému pro správu verzí. Pokud něco pokazíte, můžete se vrátit o krok zpět. Kombinujte nástroje IDE s průběžným spouštěním testů – ne až na konci. Až budete refaktoring dělat pravidelně, zjistíte, že vestavěné funkce nejsou jen zkratka, ale způsob, jak udržet kód čitelný a předvídatelný.

Praktický postup je postupný. Vyberte jednu oblast, například formátování kódu, a sjednoťte ji jako první. Zaveďte ji tak, aby fungovala i bez ručního zásahu, a teprve po ověření přidejte další. U každé změny si předem řekněte, jak poznáte, že funguje: sníží se počet konfliktů při slučování, zmizí opakované opravy stejné chyby, nový člen týmu spustí projekt bez dodatečného vysvětlování. Bez těchto měřítek se sjednocení zvrhne v debatu o preferencích.

Python nabízí dva hlavní přístupy k testování: vestavěný modul unittest a knihovnu pytest. Zatímco unittest vychází z Javy a vyžaduje třídy a dědičnost, pytest stojí na jednoduchých funkcích a assertech. Rozdíl se projeví hned na prvním testu. V unittest napíšete metodu uvnitř třídy odvozené od TestCase a porovnání řešíte přes self.assertEqual. V pytestu stačí funkce a běžný příkaz assert. To je důvod, proč si pytest získal širokou oblibu.

Dobře napsaná zpráva se pozná tak, že při hledání v historii nemusíte otevírat samotný diff. Stačí projít seznam commitů a máte jasno. Zaveďte si jednoduchý zvyk: nejdřív napište, co změna dělá, pak proč, a teprve nakonec zmiňte, jak. Výsledkem je historie, která se dá číst jako deník projektu – a to je při zpětné dohledatelnosti změn ta nejcennější vlastnost.

Nakonec platí, že sjednocení není jednorázový úkol, ale dohoda, kterou je potřeba udržovat. Vyberte variantu, která odpovídá velikosti týmu a počtu projektů, a nechte si prostor pro změnu, až se podmínky vyvinou. Jednotná konfigurace má smysl jen tehdy, když zjednodušuje každodenní práci, ne když přidává další vrstvu, kterou je třeba hlídat.

U rozsáhlejších úprav se vyplatí strukturované vyhledávání a nahrazování. To umí pracovat se syntaxí, ne jen s textem. Najdete tak všechny výskyty určitého vzoru, například volání metody bez kontroly návratové hodnoty, a nahradíte je bezpečně. Běžná chyba je příliš obecný vzor, který zachytí i nesouvisející kód. Vždy používejte náhled a omezujte rozsah na konkrétní adresář nebo soubor.

Extrakce a přesun jako rutina Extrakce metody nebo proměnné (Refactor >Extract Method/Variable) zvládne během vteřiny to, co by ručně zabralo desítky minut. Označte blok kódu, spusťte extrakci a IDE vytvoří novou metodu včetně parametrů a návratové hodnoty. Pokud extrahujete příliš mnoho najednou, vznikne metoda s deseti parametry – to je signál, že je lepší rozdělit kód na menší části. Stejně tak Move přesune třídu nebo funkci do jiného souboru a automaticky opraví všechny importy a reference.