👋 Nový obsah na borekb.cz

Info Tento blog je v "read-only módu" a nový obsah již nebude přibývat. O vývoji píšu na DevBlog.

PHP testovací frameworky

Ještě než se definitivně rozloučím s PHP, chci si napsat pár poznámek o dvou testovacích frameworcích pro PHP – jedním je SimpleTest a tím druhým PHPUnit.

Na SimpleTest se mi líbí:

  • Extrémně jednoduché na začlenění do projektu – v podstatě stačí stáhnou ZIP, rozbalit ho někam po bok aplikace, napsat test a spustit ho v prohlížeči
  • Slušně schopný framework
  • Podpora pro mockování
  • Umí testovat reálnou webovou stránku v prohlížeči (assertTitle, assertHeader a podobně)
  • Existuje modul pro Drupal

Pro PHPUnit hovoří:

  • Excelentní možnosti frameworku – parametrizované testy, testy v anotacích (zajímavá věc, vůbec nemusíte psát separátní testy, jen třeba nad metodu Add do komentáře přidáte @assert (1, 2) == 3 a „anotační test“ bude vykonán), podpora testdox (generování specifikace přímo ze zdrojového kódu), BDD, mockování, databázové testy, generování kódu z testů, asserty pro XML (i když ty aktuálně nemohou fungovat kvůli bugům v PHP) a tak dále. Možnosti PHPUnit mě celkem ohromily, takový rozsah jsem nečekal.
  • De-facto standard, protože si ho pro unit testy vybral Zend Framework a k přesunu od SimpleTestu k PHPUnitu dochází i jiných významných projektech (např. Joomla)
  • Code coverage
  • Integrace se Seleniem pro testování webů v prohlížeči
  • Integrace s phpUnderCon­trol, CruiseControl a podobně

Nevýhody PHPUnit:

  • V porovnání se SimpleTestem náročná instalace (závislost na PEARu, nutnost měnit PATH proměnnou prostředí apod.)
  • V současné verzi je nedořešená možnost verzování PHPUnit po boku vlastní aplikace (někteří vývojáři, mě nevyjímaje, mají rádi co nejvíc externích závislostí v Subversion nebo v jiném VCS společně s aplikací; s PHPUnit je to problém, protože se instaluje někam do C:\php, ne po bok aplikace)
  • GUI neexistuje, v současnosti jediným podporovaným rozhraním je příkazový řádek. Tohle mi hodně vadilo.

Na jednoduchý projekt bych asi doporučil SimpleTest především proto, že ji lze jednoduše přidat do version control a do README.txt ostatním vývojářům jen napíšete, aby jednoduše v prohlížeči navštívili testrunner.php – to je celé. PHPUnit je naproti tomu špičkovým frameworkem, u kterého ale zatím v současné verzi zaplatíte daň v podobě obtížnější instalace a nižší použitelnosti.

Zařazeno do kategorií |
Martin (Út, 2008-07-01 16:22):

Používám PHPUnit bez instalace právě jen přes externals v SVNku a zatím jsem s tím neměl problém.

Borek (Út, 2008-07-01 16:33):

Já jsem pak měl problém s relativníma cestama v require direktivách a taky se muselo víc psát na příkazové řádce (už nebylo tak jednoduché stoupnout si do libovolného adresáře a zavolat phpunit, když tento skript nebyl v PATH). Radši jsem to vzdal a šel jedinou oficiální cestou, což je instalace přes PEAR.

LLook (So, 2008-07-05 09:32):

Relativní cesty vyřeší vhodné nastavení direktivy include_path, což lze udělat kdekoli – třeba v nějakém tom testrunner.php funkcí set_include_path(). To platí vesměs pro všechny PEAR knihovny používané samostatně, protože relativní cesty má PEAR v kódovacích konvencích.

Neexistence GUI mě taky pálila. Ani ne tak kvůli barvičkám (těch lze nakonec docílit i na konzoli), jako kvůli možnosti pohodlně vybrat testy ke spuštění. Jak testů přibývá, tak spouštět vždycky všechny začíná zdržovat, zvlášť když jedou v jednom threadu. Hodil by se seznam testů, ve kterém bych si zaškrtl, které spustit a které ne.

Nic podobného jsem ale neviděl ani pro SimpleTest.

Borek (Ne, 2008-07-06 12:23):

U SimpleTestu je triviální si takové GUI napsat, viz např. zde.

Komentáře jsou uzavřeny (blog je v read-only módu). Pokud mě chcete kontaktovat, můžete mailem.