Jak jsem chtěl dělat unit testy PHP a jak to celé dopadlo
Znáte to sami, jednoho dne se při programování dostanete do stavu, kdy už vám mohou pomoci jen dobré unit testy a vůbec důsledné testování. No i já jsem se na jednom ze svých projektů dostal do podobného stavu. Nutno říci, že projekt začal velmi nevinně jako jednoduchý tool co mi měl pomoci, ale jeho nasazení v provozu si vyžádalo stability, než bylo původně plánováno.
Začněme ale od počátku ať je vše jasné. Při tvorbě toolu jsem musel sáhnout po jiném IDE a jazyku než je oblíbené Visual Studio a projekt psaný v C#. Běh na Linux based serveru mi nabízel několik možností, kde se mi jako nejsnazší jevilo použití PHP. PHP není rozumně podporované ve VS, tak jsem se přehoupl k dalšímu velmi hezkému IDE PHPStorm od JetBrains (tedy abych byl přesný použil jsem IntelliJ IDEA s PHP pluginem).
Projekt se mi rozběhl, vyřešil jsem mnoho problémů nováčka v PHP, zavzpomínal na staré dobré časy ASP (neplést s ASP.NET) a napsal docela web dělající co jsem potřeboval. Po nějaké době, jsem ale zjistil, že web je užíván více něž bylo plánováno. Najednou mi uživatelé mi hlásili chyby. Protože jsem PHP bral jako okrajovou záležitost, používal jsem základní nastavení, žádné testování, dokumentace či dodržování pravidel jak psát. Co nyní? Ve Visual Studiu s nastaveným ReSarperem je to hračka. Ale tady? Začal jsem studovat možnosti a bylo jich dost, jen problém, jak je nainstalovat na můj notebook běžící ve Windows 10 s IIS a PHP jako CGI?
Kapitola první: PEAR
Hned první návod na JetBrain stránkách mluví o jakém si PEAR, který se jmenuje PHPunit a řeší testování. Tak šup na stránky phpunit.de a zde stáhnout poslední verzi. Namapovat do IDE, napsat test a spustit.
Tak snadné? Kdepak. Hned po spuštění chyba. Tak hledám co a jak. Návodů je kupa tak je beru popořadě a instaluji di PHP program PEAR. Instaluji PHPunit pomocí něj. Nejde to prý je třeba jiného nástroje jménem Composer. Hledám jej a instaluji. Jak PEAR tak Composer fungují (tedy v příkazové řádce). Jak je dle návodl nastavím ve IDE, tak je problém.
Kapitola druhá: PHPdoc, PHP Mess Detector a PHP Code Sniffer
Mám načteno kvanta návodů, stránek a popisů když najdu pár dobrých, co by pomohli, najdu i jiné věci, které by mi mohli pomoci. Instaluji dle návodů PHPdoc, PHP_PMD čili Mess Detector a Code Sniffer. Vše se rozbíhá v IDE okamžitě a já nacházím řadu potencionálních chyb. Kontrolu na PHPdoc jsem musel vypnout. To je tak ukecaný, že se to pak ani nedá číst. Dokumentace mne nebolí, ale ty testy. Znovu se vrhám na instalaci PHPunit.
Kapitola třetí: hurá je to tam
Při hledání problémů s PHPunit jsem našel článek popisující podobný problém, ale na staré verzi PHPStormu. Zde byl problém v moc nové knihovně PHPunit.pear. V první chvíli jsem článek jen přečetl a pokračoval v hledání řešení. Hodiny ubíhají, jak mám projekt jen a pouze s testováním a snažím se stále uchodit PHPunit v IntelliJ. Už si zoufám, až si vzpomenu na ten článek o moc nové knihovně. Jdu na stránky phpunit.de a stahuji starší verzi phpunit.pead. Jen ji vyměním za již implementovanou a voala… test jede. Rychle se vracím k původnímu projektu, vše nastavuji jak je třeba a napíši testovací rutinu. Jede, tak to je zázrak. Po cca deseti hodinách usilovného hledání řešení je tak snadné. Stačí použít starší knihovnu, kdo by to řekl.
Nyní již začínám původní projekt přepisovat a to včetně testů a alespoň základního dodržování pravidel psaní kódu. Mám pár problémů, ale ty již snad nezaberou tolik času.
A jaké je poučení? Pokud v řádce vše funguje jak má a v IDE ne, tak zkuste starší verzi, třeba to zabere.