Na nabídku

Automatické testování pomocí utilit


O věci jménem PHPUnit a následné sestavě se systémem Jenkins jste asi slyšeli. Taky jsem zkusil a mám několik zásadních výhrad.

První a ta nejhorší výhrada se týká především autorů návodů a tutoriálů. Všichni autoři, které jsem našel (včetně oficiálních), rádi předvedou, jak začít psát jednoduchý test. Dobře. Kolo dva ale zní, že naprosto všichni také předpokládají, že vývoj pomocí testování pojede od samého začátku nebo testy nad běžící aplikací bude psát zkušený kodér. Chyba...

Druhá výtka navazuje. Pokud mám chuť se testování naučit a zároveň je třeba ho zahájit nad nějakou aplikací, tak potřebuji začít v části, kde vadný test nenadělá moc škody. Tedy ne hlavní části jako jsou uživatelské účty. Proto jsem chtěl začít v pluginu, jehož využití je jenom místní. Nejde to. Z nějakého důvodu nedokážu podhodit tabulku připravených falešných dat (mock) jako zdroj pro srovnání. Projížděl jsem spousty míst, včetně oficiální podpory CakePHP na irc, ale nikde nebyl návod, jak rozjet pouze věci v testu v pluginu.

Tohle jsou asi největší důvody, proč i já zatím preferuji vývoj vodopádem ( naprogramuj - var_dump - uprav - ... - hotovo). Dále je snazší přejít z vývoje skrz testy na vodopád.

Jak je na tom PHPUnit vůči KWebCMS

Odpověď zní - PHPUnit je nepoužitelné. KWebCMS 2 NENÍ stavěné na testování těmito prostředky. Je to způsobeno hlavně tvrdým zaměřením na práci nad diskem - jeho databází jsou soubory a složky. A to je věc, která velmi omezuje možnost užít nástrojů, které se souborovými systémy až tak nemají rády. Pro automatické testování nad souborovým systémem je třeba očekávat jak různorodé nedostupnosti disku, tak potřebu mít někde bezpečně odložená základní data, která pak proti testům staví. Druhá věc, která dělá tyto věci nepoužitelnými, je užitá logika, kde jsem výrazně zaměřen na vstupy a výstupy a co si drží uvnitř, to je pro okolí černá skříňka. A to hlavě díky tom, že jsem to dotáhl až do absurdního stavu, kdy v zásadě jsou v některých případech ve třídě v modulu jen dvě funkce - která data přebere a která vyplivne výsledek v požadovaném tvaru.

Samotná testovací sestava jde napsat, avšak musí počítat právě i se specifiky práce proti disku. Veškeré knihovny (nízkoúrovňové operace) lze testovat jen přímo proti datům, která mají na disku a která se tak ověří z něj. Navíc je potřeba podstrčit celé falešné testovací prostředí. Vyšší úroveň (moduly) už lze testovat obvyklejším způsobem. U mne je jen potřeba podhodit správné falešné knihovny a další součásti. Nakonec nejvyšší úroveň (paradoxně prostředí jádra) zajímá jen jestli existuje modul, je rozumný uživatel a smí modul pro uživatele otevřít a které všechny moduly zná. Vůbec jádra všech tří součástí (prezentace, administrace, instalace) jsou svým postavením vyjímečná vůči ostatním částem. Ale to je jinam.

KWCMS 3

Změna stavu. Díky pokroku uvnitř PHP (5.5+) lze poměrně rozumně začít řešit problematiku, která s připojení na disk vyplývá. Proto u této verze už bude přistoupeno k užití testování.

Petr Plšek, 182 00 Praha, me@kalanys.com