První unit test krok za krokem: praktický návod
Na závěr si osvojte práci s nástrojem Test Explorer ve Visual Studiu nebo s příkazem dotnet test. Umožní vám spustit vybrané testy, filtrovat podle kategorií a zobrazit podrobné informace o selhání. S NUnit se vyplatí prozkoumat i pokročilé funkce, jako jsou parametrizované testy, setup a teardown, nebo asynchronní testy. Tyto nástroje vám dovolí psát testy efektivněji a s menším množstvím opakujícího se kódu.
Když jako vývojář dostanete návrh od designéra, často vypadá dokonale. Problém však nastává ve chvíli, kdy máte z Pixel Perfect předlohy vytvořit funkční rozhraní. Základní pochopení UI a UX principů vám umožní nejen lépe komunikovat s designéry, ale také odhalit chyby, které by uživatele stály čas nebo peníze. Tento článek se zaměřuje na praktické dovednosti, které využijete při každodenní práci na frontendu.
Základem každého testu je struktura AAA – Arrange, Act, Assert. V první fázi připravíte vstupní data, ve druhé zavoláte testovanou funkci a ve třetí porovnáte výsledek s očekáváním. Většina začátečníků dělá chybu, že všechny tři fáze smíchá dohromady. Test pak není čitelný a při jeho selhání nevíte, co se vlastně pokazilo. Držte se jednoduchého pravidla: jeden test = jedno chování. Pokud potřebujete ověřit pět věcí, napište pět testů.
Prvním krokem je pochopení rozdílu mezi UI a UX. UI (User Interface) se týká vizuální stránky – barvy, typografie, mezery, ikony. UX (User Experience) pak zahrnuje celkový pocit z používání produktu, obrazovkami a srozumitelnost interakcí. Jako vývojář byste měli vnímat obojí. Například místo abyste jen naprogramovali tlačítko, přemýšlejte, zda je jeho umístění očekávatelné a zda je jeho velikost dostatečná pro kliknutí prstem na mobilu. Tím předcházíte frustraci uživatelů a zbytečným bug reportům.
Pro praktické cvičení si vytvořte jednoduchou aplikaci, která zobrazuje seznam úkolů. Použijte SwiftUI a @State pro správu dat. Přidejte možnost přidávat a mazat položky. Tím si osvojíte základní principy: vazbu dat na rozhraní, předávání dat mezi obrazovkami a práci s uživatelským vstupem. Během vývoje narazíte na to, že je nutné řešit i správu souborů nebo ukládání dat. Pro začátek stačí použít UserDefaults pro jednoduché nastavení, ale pro složitější data sáhněte po Core Data nebo SwiftData, které jsou součástí systému.
Dalším důležitým aspektem je responzivita. Návrhy obvykle přicházejí v jedné velikosti, nejčastěji pro desktop. Vaším úkolem je rozhodnout, jak se layout přizpůsobí menším displejům. Při breakpointech se zaměřte na obsah – pokud se text na šířku nevejde, zalomte ho, ne jej zmenšujte. Mějte na paměti, že uživatelé na mobilu neklikají myší, ale prstem, takže minimální velikost tlačítek a odstupů musí být větší než na desktopu. Testujte na skutečných rekonstrukce koupelny krok za krokemřízeních, ne jen v devtools.
Pozor si dejte i na méně obvyklá místa, kde se SQL injection může schovat. Často se zapomíná na HTTP hlavičky, cookies nebo soubory nahrané uživatelem. Tyto hodnoty také procházejí aplikací a mohou skončit v databázi. Vždy je ošetřete stejně jako formulářová pole. Dále myslete na chybové hlášky – nikdy nevracejte uživateli detailní výpis SQL chyby. Útočník by z něj získal informace o struktuře databáze. Místo toho logujte chyby do souboru a uživateli zobrazte neutrální hlášení.
Při psaní testů se držte pravidla AAA – Arrange, Act, Assert. Nejdříve připravte vstupní data a objekty, poté vyvolejte testovanou metodu, a nakonec ověřte očekávaný výsledek. Například při testování třídy Calculator s metodou Add nejprve vytvoříte instanci, zavoláte metodu s čísly 2 a 3, a poté ověříte, že je výsledek 5. Tento postup zajišťuje čitelnost a jednoznačnost testu.
Při psaní prvního testu se také vyplatí myslet na okrajové případy. Prázdný vstup, nulová hodnota, extrémně velké číslo nebo prázdný řetězec. Tyto případy často odhalí chyby, které běžné použití neukáže. Začněte s jedním šťastným scénářem, ale hned poté přidejte test pro neplatný vstup. Funkce by měla selhat elegantně, ne spadnout s nesrozumitelnou výjimkou. Pokud testujete funkci, která dělí, přidejte test pro dělení nulou. Pokud parsujete text, otestujte prázdný řetězec.
Až budete mít aplikaci funkční, zaměřte se na testování. Nezůstávejte jen u toho, že aplikace funguje na vašem telefonu. Vyzkoušejte ji na emulátoru s jinou verzí systému a případně na dalším zařízení, pokud ho máte k dispozici. Sledujte, jak se chová při rychlém přepínání obrazovek, při otáčení displeje nebo při nedostatku paměti. Všechny tyto situace mohou odhalit skryté chyby. Jakmile máte pocit, že je aplikace stabilní, můžete přemýšlet o jejím zveřejnění. Ale to už je téma na další článek – nejdřív si užijte pocit, že jste vytvořili něco, co opravdu funguje.