Niedawno pokazałem jak zainstalować PHP_Unit, oraz jak wykonać z pomocą tego frameworka testy jednostkowe. W tym artykule postaram się pokazać, jak wykorzystać rozszerzenie Xdebug do generowania przejrzystych raportów pokazujących pokrycie kodu testami jednostkowymi.
Czego potrzebujesz?
- serwera www, np. Wampa.
- zainstalowanego frameworka PHP_Unit – jak?
- zainstalowanego rozszerzenia Xdebug – jak?
- jakichś 5 minut wolnego czasu
Quick start
Stwórz plik `MyClass.php’ i umieść w nim taki kod:
<?php class MyClass { public function add($a, $b) { return $a + $b; } public function multiply($a, $b) { return $a * $b; } }
W tym samym katalogu stwórz plik `MyClassTest.php’ umieść w nim taki kod:
<?php require_once 'PHPUnit/Framework.php'; require_once 'MyClass.php'; class MyClassTest extends PHPUnit_Framework_TestCase { public function testAdd() { $o = new MyClass(); $res = $o->add(2, 4); $this->assertEquals($res, 2+4); } }
Odpal wiersz poleceń, przejdź do katalogu z tymi plikami:
D:\programy\console\bin\debug>f: F:\>cd vhosts\localhost
(u Ciebie oczywiście może być ina ścieżka)
Wykonaj polecenie:
phpunit --coverage-html MyClassTestReport MyClassTest
Powinny się pojawić takie komunikaty:
PHPUnit 3.4.12 by Sebastian Bergmann. . Time: 1 second, Memory: 5.75Mb OK (1 test, 1 assertion) Generating code coverage report, this may take a moment.
Zajrzyj teraz do katalogu `MyClassTestReport”. Otwórz plik `index.html’. Powinieneś zobaczyć coś podobnego:
Kliknij na link “MyClass.php”. Powienieneś zobaczyć mniej więcej coś takiego:
Co tu widzimy?
Na górze widać tabelkę z procentowymi wynikami działania testu.
Poniżej widzimy kod testowanej klasy. Na zielono zaznaczone są linie, które były testowane w trakcie testów. Na szaro te, do których nie da się dojść nigdy. Na pomarańczowo zaznaczone są linie, które podczas testów nie były ani razu “odwiedzone”. Dodatkowo po lewej stronie dwukropka widać ile razy odwiedzono daną linię.
Co dalej
- Dokumentacja PHP_Unit
- Bardzo ciekawe materiały dotyczące zasad pisania Unit testów dra Manuszewskiego
- Artykuł o Unit testach