Reducery a async akce: testy bez běžícího integračního prostředí

Z Mazovia

Dalším častým omylem je domněnka, že stačí ošetřit vstup na začátku aplikace. Data se mohou dostat do dotazu i z databáze, z mezipaměti, ze souboru nebo z externího rozhraní. Stejně nebezpečné je spoléhat na to, že magické uvozovky nebo automatické escapování vyřeší vše. Escapování je vázané na konkrétní znakovou sadu a konkrétní databázi. Při nesprávném nastavení připojení může být obejité. Parametrizace žádné takové podmínky nemá.

Prvním krokem je rozdělit testování podle toho, co chcete ověřit. Jednotkové testy pokrývají logiku, výpočty a zpracování dat. Instrumentační testy kontrolují, jak se chová obrazovka po klepnutí, otočení displeje nebo přechodu do jiné aktivity. Manuální testování na skutečných zařízeních odhalí to, co automatizace přehlédne: pomalé načítání, podivné posuny rozvržení, nedostatečný kontrast. Vyberte pro každou vrstvu jiný nástroj, ale nesnažte se všechno řešit jedním.

Commity piš po malých kusech a srozumitelně Nejčastější chyba rekonstrukce koupelny krok za krokemčátečníků je jeden obří commit na konci dne s popisem „změny". Takový záznam je k ničemu, když za týden hledáš, kdy se rozbila validace formuláře. Commituj po logických celcích: oprava jednoho bugu, jedna nová komponenta, úprava stylů. Zprávu piš v rozkazovacím způsobu a stručně, například „oprav validaci e-mailu". Pokud musíš v popisu vysvětlovat souvislosti, použij delší tělo zprávy, ale první řádek nech krátký.

Nakonec měřte, co testy přinesly. Sledujte, kolik chyb se podařilo zachytit před vydáním a kolik jich hlásí uživatelé. Podle toho upravte priority. Testování není o tom mít nejdražší nástroj, ale o tom mít jasný postup, který se dodržuje i ve spěchu.

Základem obrany je používat parametrizované dotazy nebo prepared statements. Databázový ovladač pošle strukturu dotazu zvlášť a hodnoty zvlášť, takže vstup nikdy nezmění syntaxi příkazu. V praxi to znamená, že místo skládání řetězce s proměnnou uvnitř dotazu předáte hodnotu jako vázaný parametr. Tento přístup podporuje většina moderních knihoven a frameworků. Pokud používáte ORM, ověřte, že i přímé dotazy v něm jsou parametrizované, protože některé metody umožňují vložit surový řetězec.

Emulátor nestačí, potřebujete i reálný hardware Emulátory a simulátory jsou rychlé a pohodlné, ale mají limity. Nezachytí přesně spotřebu baterie, chování dotykového panelu při rychlém psaní, ani to, jak aplikace reaguje, když přijde hovor nebo když se telefon přehřeje. Uvolněte si proto alespoň dvě až tři skutečná zařízení s různými verzemi operačního systému a různě velkými displeji. Testujte na starším i novějším modelu, protože výrobci se chovají odlišně k oprávněním, oznámením a běhu na pozadí.

Poslední návyk je pravidelnost. Verzuj každý den, kdy na projektu pracuješ, i kdyby šlo o drobnost. Malé kroky se snadno vracejí, velké skoky bolí. Až budeš mít tyto návyky zautomatizované, přestaneš řešit nástroj a začneš řešit skutečnou práci.

Typická chyba je testovat jen na zařízení, na kterém vývojář pracuje. Aplikace se pak rozbije na telefonu s menší pamětí nebo na systému, kde uživatel omezuje běh na pozadí. Další častá chyba je ignorovat přerušení: příchozí zpráva, nízký stav baterie, přepnutí do jiné aplikace. Zkuste tyto situace nasimulovat ručně a sledujte, zda se a zda se aplikace vrátí do stejného stavu.

Nauč se číst historii. Příkaz pro výpis commitů a rozdílů ti ukáže, co se vlastně stalo. Když něco rozbiješ, vrať se k poslední funkční verzi a porovnej ji s aktuální. Tím se učíš rychleji než sledováním tutoriálů. Zálohu měj vždy na vzdáleném repozitáři, ne jen na svém disku. Lokální historie tě nezachrání, když odejde disk.

Prvním krokem je inicializace repozitáře ve složce projektu. Hned po ní vytvoř soubor, který říká, co má být ignorováno. Bez něj ti do historie nateče složka s balíčky nebo produkční build a repozitář nabobtná během několika commitů. Do ignorovaného seznamu patří i soubory s hesly, přístupovými klíči a konfigurací prostředí. Ty se do historie dostanou snadno a odstranit je zpětně je otrava, protože zůstávají ve starých commitech.

Verzování nezačíná instalací nástroje, ale rozhodnutím přestat pojmenovávat soubory jako web-final-v2-opravdu-posledni. Než spustíš první příkaz, ujasni si, co bude repozitář obsahovat. Pro webový projekt to znamená zdrojové soubory, konfigurace a dokumentaci. Naopak závislosti, zkompilované výstupy a lokální nastavení do repozitáře nepatří. Právě tady vzniká většina problémů, které později bolí při sloučení větví.

Pro ověření pořadí a obsahu akcí si držte pole zaznamenaných dispatch volání. Porovnávejte typy akcí a payload, ne celé objekty, pokud obsahují časová razítka nebo generované identifikátory. Pokud potřebujete ověřit, že se akce neposlala, zkontrolujte, že v poli není žádná položka daného typu. Vyhněte se testování interních detailů, jako je počet volání pomocné funkce, pokud to není součást kontraktu. Testy, které kontrolují příliš mnoho, se rozbijí při každém refaktoringu a nikdo je nebude opravovat.