Ověření zda 100% kódu je pokryto testy rubrika: Programování: PHP
Testy si píšu sám bez pomoci frameworků, takže nemám 100% přehled o tom co vše již existuje.
Proto se ptám zde,
Existuje pro PHP nějaký nástroj, který zjistí zda se v průběhu testů prošly všechny části zdrojového kódu?
Osobně si myslím, že by něco takového neměl být zas takový problém naprogramovat.
Idea: Vzít tokenizer, každý středník zdrojáku nahradit očíslovanou funkcí "TudyJsemProšel" tj. něčím jako "; Tested(123) ;" a po skončení testů vyhodnotit která čísla chybí.
Vidím tam pár specialitek typu: Jednopříkazový statement neuzavřený do složených závorek, ternální operátor a větvení dělané pomocí && či ||. Ale celkově si myslím, že by to naprogramovat mělo jít.
Předpokládám, že nejsem první koho něco takového napadlo, ale najít to fakt nikde nemohu.
Všechny nástroje pro code coverage v PHP jsou pokud vím postavené na XDebugu. Co se týče zmíněných specialitek, tak ternární operátor ti označí celý jako provedený, i když se provede pouze jedna větev, stejně tak větvení typu $condition && action();
je pro něj jeden statement.
Jak se používá code coverage v PHPUnit je popsané tady:
- https://phpunit.de/manual/current/en/code-coverage-analysis.html
- https://phpunit.de/manual/current/en/textui.html#textui.clioptions
Pokud ty reporty mají mít nějakou vypovídající hodnotu, tak stojí za zvážení používání anotace @covers
, aby ti zezelenal pouze ten kód, který daný test skutečně testuje a ne kód, který se volá mimoděk při testování něčeho jiného.
PhpStorm umí PHPUnit testy spouštět s coverage, kterou pak zobrazí v editoru vedle kódu, to se taky občas hodí: https://laracasts.com/series/how-to-be-awesome-in-phpstorm/episodes/23
Nette Tester je na tom o něco hůř, ale základní podporu má taky - umí vygenerovat HTML report, nebo XML: http://tester.nette.org/#toc-coverage-path
Dobré je také vědět, že do reportu jsou zahrnuty pouze soubory, které se během toho průchodu provedou, o ostatních XDebug pochopitelně neví. Takže jestli cílíš na nějaké procento pokrytí (můžeme se tu pohádat, jestli to není blbost ;-) ), tak bys měl nějak naincludovat všechny soubory v projektu, jinak budeš mít dost zkreslená čísla.
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře