Unit testy a Nette?
- Martin Mates
- Člen | 179
Chci se zeptat, jako člověk úplně nepoznamenaný Unit testy. Mám hotovou aplikaci v Nette jako bakalářku a v části o Testování by se měly tyto testy objevit. Vedoucí mi doporučil následující odkazy (http://www.simpletest.org/, http://phpunit.sourceforge.net/, http://www.opensourcetesting.org/unit_php.php). Nikdy jsem takto nic netestoval, takže ani nevím, co takový test vlastně provádí.
Chápu, že se tady asi nikomu nechce mi sáhodlouze vysvětlovat problematiku. Jde mi jen o to, jestli s tímto testováním Nette aplikace nemáte nějaké zkušenosti. Případně nějaký doporučit. Má to vůbec cenu takto testovat? Ono by stačilo třeba do bakalářky napsat, že jsem to nedělal a proč.
Budu rád, za jakékoli postřehy. Díky!
- romansklenar
- Člen | 655
Pro naučení principů unit testů není PHP podlě mě zrovna nejvhodnější, pokud nevíš jak jej rozchodit. Doporučoval bych ti osahat si jak to funguje JUnit v Javě, protože podpora pro něj bývá integrována v IDEčkách, najít si nějaký tutoriál, napsat jednoduchý TestCase, osahat si to a pak praxi zkusit převést na PHP – principy jsou stejné, myslím že z tohoto příkladu by to potom mělo být jasné. Doporučuju PHPUnit, má taky podporu v některých IDEčkách, stáhneš ho přes PEAR, nastavíš include path a můžeš testovat. Teoretických materiálů co a jak testovat i obrázkových tutoriálů jak se na to v IDEčkách doklikat je na netu plno.
EDIT: k dotazu, zda-li se vyplatí testovat, tak odpověď není jednoznačná – třeba takové modely se (si myslím) testovat vyplatí – když do nich často hrabeme a vememe v potaz, že na nich stojí podstatná část aplikace, tak je testování pohodlnější cestou, než se o chybě dozvědět, když už je třeba pozdě.
- jasir
- Člen | 746
Martin Mates napsal(a):
Chci se zeptat, jako člověk úplně nepoznamenaný Unit testy. Mám hotovou aplikaci v Nette jako bakalářku a v části o Testování by se měly tyto testy objevit. Vedoucí mi doporučil následující odkazy (http://www.simpletest.org/, http://phpunit.sourceforge.net/, http://www.opensourcetesting.org/unit_php.php). Nikdy jsem takto nic netestoval, takže ani nevím, co takový test vlastně provádí.
Chápu, že se tady asi nikomu nechce mi sáhodlouze vysvětlovat problematiku. Jde mi jen o to, jestli s tímto testováním Nette aplikace nemáte nějaké zkušenosti. Případně nějaký doporučit. Má to vůbec cenu takto testovat? Ono by stačilo třeba do bakalářky napsat, že jsem to nedělal a proč.
Budu rád, za jakékoli postřehy. Díky!
Jenom malý postřeh, asi nejlepší a nejpoužívanější PHPUnit nemáš v odkazech. Takže tady http://www.phpunit.de/
- johno
- Člen | 10
Ak ide o Unit testy, tak je jedno ci pouzijes SimpleTest alebo PHPUnit, tam je to +/- to iste. PHPUnit ma trochu flexibilnejsi kod a nejake ficurky(code coverage), ktore aj tak asi nebudes (teraz) potrebovat. SimpleTest stiahnes, includnes a funguje, neviem ako PHPUnit.
Ak ide o vysokourovnove akceptacne testovanie na urovni scenarov, tak potom je lepsie siahnut po SimpleTest, tam je vstavany vlastne maly webbrowser, ktorym je mozne poklikat celu aplikaciu a zistit ci nieco funguje.
PHPUnit myslim ma podporu Selenium, co sa zase hodi ked chces testovat napriklad AJAX, ale je to pomalsie a vyzaduje to dost nastavovania.
Co sa tyka automatickeho testovania, tak jednoznacne odporucam.
Co sa tyka vyvoja riadeneho testami (TDD), tak to tiez velmi odporucam, ale chce to riadnu davku sebadiscipliny. Ale predpokladam, ze na to je u teba neskoro, kedze si to uz vlastne nakodil.
Off-topic: Ja sice PHP uz moc nerobim, ale existuje nieco podobne ako Cucumber (http://wiki.github.com/…introduction) pre PHP?
- llook
- Člen | 407
Nikdy jsem takto nic netestoval, takže ani nevím, co takový test vlastně provádí.
Unit testy se používají k regresnímu testování systému na úrovni těch nejmenších jednotek. Například když máš funkci pro výpočet obsahu kruhu z poloměru, tak si pro ni můžeš třeba udělat test, že při r=15 ti dá výsledek 148.
Když pak zaneseš do systému nějaké změny, opětovným spuštěním těchto testů se přesvědčíš, že sis tím nerozesral něco staršího.
Typický unit test sestává ze tří kroků, označovaných jako 3A: Arrange, Act, Assert:
- Arrange: Připravit prostředí pro provedení testu (např. inicializuje se testovací databáze).
- Act: Provede se nějaká akce (např. zavolá se testovaná metoda).
- Assert: Ověří se výsledek (např. porovná se výsledek testované metody s očekávaným výsledkem).
Na to v principu žádný zvláštní nástroj nepotřebuješ, v jednoduchých případech si vystačíš s čistým PHP, viz http://www.phpunit.de/…g-tests.html . Ale v praxi se vyplatí použít PHPUnit nebo SimpleTest, protože tvým testům dají jakýsi rámec a spoustu věcí usnadňují (hlavně Assert).
Test Driven Development (TDD) s tím úzce souvisí, ale unit testování ještě nemusí znamenat TDD. TDD jsou metodiky vývoje, při kterých se testy píšou ještě před implementací. Dal bych ti ještě jeden odkaz, pokud tě TDD zajímá: http://www.grada.cz/…-testy_3316/
Má to vůbec cenu takto testovat? Ono by stačilo třeba do bakalářky napsat, že jsem to nedělal a proč.
Určitě má cenu skoro vždy používat nějaké formy regresního testování, ale zrovna testování jednotek tím nejvhodnějším vždy být nemusí. Třeba Nette donedávna testy jednotek nemělo, zato mělo sadu jiných testů. Podobně je na tom Texy.
Nějaká ta znalost unit testování ale v dnešní době patří do základní výbavy programátora, takže pokud se tomu oboru chceš dál věnovat, tak se v této oblasti vzdělej bez ohledu na bakalářku.
- Martin Mates
- Člen | 179
Díky moc všem za odpovědi! Určitě si o tom něco přečtu víc, ale teď už nestíhám, tak to v bakalářce asi vypustím.