Jak jsem si zamiloval TDD

Jako asi každý vývojář, jsem i já četl o tom, jak je důležité psát unit testy. Občas jsem nějaké psal, ale nebylo to dostatečné. Na posledním projektu, kde vývoj trval zhruba rok a půl, jsem začal unit testy psát až během posledních několika měsíců. Což bylo sice ostudně pozdě, ale lepší než nic. (Jednalo se o testy na serverové straně, na klientský JS jsme žádné testy neměli. Člověk si musel všechno ručně proklikat. Hrůza.)

Takže poučen z předchozích nezdarů jsem si řekl, že v novém projektu musím mít testy pokud možno na všechno. Vyvíjím teď klientskou část aplikace v Angularu. Nejhorší bylo s testovaním vůbec začít… respektive nastavit si prostředí tak, aby javascriptové unit testy vůbec šli spustit. Chtěl jsem js unit testy integrovat přímo do Visual Studia, chtěl jsem na pozadí spouštět PhantomJS, integrovat testy do build serveru… Zabil jsem na tom skoro 3 dny a nakonec udělal to nejjednodušší, co ještě fungovalo. Což jsem měl udělat hned. Žádná sofistikovaná integrace s VS není třeba,  stačí command line okno. PhantomJs není třeba, stačí obyčejný Chrome. Navíc v případě potřeby můžu v testovacím chromu vlézt do konzole a debugovat. Možná by testy v Phantomu běželi rychleji, protože se nikde nic nevykresluje, ale těch pár milisekund klidně oželím.

Postřehy o TDD

1) Trávím mnohem více času hrabáním se v testech, než že bych proklikával aplikaci a zkoumal, proč co kde sakra nefunguje.

2) Když všechny testy prochází, cítím se skvěle. Aplikace funguje a dělá to, co má. Jsem si tím jistý, mám na to přece testy.

3) Předchozí bod má omezenou platnost. Pokud si na něco nenapíšete test, nebo je napsaný naivně, tak pořád všechny testy projdou, ale nebudou mít vypovídající hodnotu. Pozor na to 🙂

4) Mám teď skvělou karmu, díky Earle! Karma runner je skvělá věc. Hlídá změnu v souborech, a při každé změně automaticky spustí testy. Mám tak okamžitou zpětnou vazbu, hned vím jestli něco funguje či nefunguje, a většinou nemusím aplikaci proklikávat.

5) Angular je boží framework! Vyvíjí se v něm mnohem rychleji, než kdybych použil třeba jQuery nebo Backbone. Tím, že se za mě stará o update DOMu mi ušetří hromadu práce. Kód je jednodušší, přehlednější, testovatelnější. Paráda. Chvíli trvá, než se ho člověk naučí. Ale když pochopíte koncepty services, router, direktivy, filtry, dependency injection, tak pak jedete jako draci 🙂

DarthTesting

Související články

Nebuďte programátory!

Pokud se vám článek líbí, nezapomentě ho sdílet 🙂