Coraz częściej można spotkać się z pojęciem testów jednostkowych [ang. unit tests]. Dobre testy jednostkowe pozwalają wydatnie zwiększyć jakość wytwarzanego kodu, zmniejszyć liczbę błędów oraz pozwolić na zdrowsze życie programiście. Jeśli nigdy nie spotkałeś się z pojęciem testów jednostkowych to zapraszam do lektury artykułu o Unit testach. W poniższym artuklule postaram się pokazać jak zainstalować bardzo przyjemny framework - PHP_Unit.
Na początek
Przed przystąpieniem do wykonania artykułu warto wiedzieć / mieć / umieć:
- Działający serwer www - ja będę instalował na Wampie
- Mieć działające repozytorium PEAR
- Znać podstawy wiersza poleceń
Instalacja
Otwórz wiersz poleceń
Wpisz:
pear channel-discover pear.phpunit.de
Powinieneś zobaczyć:
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded
Jeśli poszło dobrze, wpisz:
pear channel-discover pear.symfony-project.com
powinieneś zobaczyć:
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded
Jeśli i tym razem poszło dobrze, przejdź do instalacji właściwej:
pear install phpunit/PHPUnit
W przypadku błędów
U mnie w tym momencie pojawiło się:
Did not download optional dependencies: pear/Image_GraphViz, pear/Log, symfony/YAML, use --alldeps to download automatically
phpunit/PHPUnit requires PEAR Installer (version >= 1.8.1), installed version is 1.7.2
phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2.1)
phpunit/PHPUnit can optionally use package "pear/Log"
phpunit/PHPUnit can optionally use package "symfony/YAML" (version >= 1.0.2)
phpunit/PHPUnit can optionally use PHP extension "soap"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5)
No valid packages found
install failed
O tym, co w takiej sytuacji można zrobić przeczytasz w artykule o instalacji nowszego PEAR instalera. W tym wypadku starczyło u mnie polecenie:
Na ekranie powinno się pojawić coś podobnego:
phpunit/PHPUnit can optionally use PHP extension "soap"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5)
downloading PHPUnit-3.4.12.tgz ...
Starting to download PHPUnit-3.4.12.tgz (254,746 bytes)
.....................................................done: 254,746 bytes
install ok: channel://pear.phpunit.de/PHPUnit-3.4.12
Gdyby ta ścieżka nie działała, to może warto zajrzeć do dokumentacji PHP_Unit.
Pierwszy test
Skoro udało się nam już poprawnie zainstalować PHP_Unit, to czas uruchomić pierwszy test.
Jako, że ma to być prosty przykład, nie będę się wiele wysilał. Skopiuję przykład z dokumentacji:P
require_once 'PHPUnit/Framework.php';
class StackTest extends PHPUnit_Framework_TestCase
{
public function testPushAndPop()
{
$stack = array();
$this->assertEquals(0, count($stack));
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertEquals(1, count($stack));
$this->assertEquals('foo', array_pop($stack));
$this->assertEquals(0, count($stack));
}
}
?>
Skopiuj powyższy kod i umieść go jaki `UnitTest.php' w swoim document root (choć chyba może być w dowolnym katalogu). Następnie:
Otwórz wiersz poleceń i przejdź do katalogu z plikiem `UnitTest.php' (u mnie to było):
Uruchom test:
PHPUnit 3.4.12 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 4.00Mb
OK (1 test, 5 assertions)
Błędny test
Poszło aż za dobrze. To co zostało wyświetlone w wierszu poleceń pozwala nam stwierdzić, że testy przeszły poprawnie. Zróbmy coś, aby nie przeszły poprawnie. Zmieńmy linię 13 w powyższym listingu na:
$this->assertEquals(0, count($stack));
Po wywołaniu testów:
PHPUnit 3.4.12 by Sebastian Bergmann.
F
Time: 0 seconds, Memory: 4.00Mb
There was 1 failure:
1) StackTest::testPushAndPop
Failed asserting that <integer:0> matches expected <integer:1>.</integer:1></integer:0>
F:\vhosts\localhost\UnitTest.php:16
FAILURES!
Tests: 1, Assertions: 5, Failures: 1.
No, takie coś mnie zadowala :). Skoro po zmianie oczekiwanej wartości test nie przechodzi, to można uznać, że testuje poprawnie.
Co dalej
|