Blog webdeveloperski Patryk yarpo Jar

Instalacja PHP_Unit

Autor wiadomości Listopad 7, 2010

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ć:

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:

pear upgrade pear

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):

F:
cd vhosts/localhost

Uruchom test:

phpunit UnitTest
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 UnitTest
PHPUnit 3.4.12 by Sebastian Bergmann.
F
Time: 0 seconds, Memory: 4.00Mb
There was 1 failure:
1) StackTest::testPushAndPop
Failed asserting that matches expected .
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

Komentarze (0) Trackbacks (1)

Leave a comment