Warning: file_get_contents(http://graph.facebook.com/http://youthcoders.net/index.php): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /var/www/old-yc/plugins/content/addthis.php on line 38
Instalacja PHP_Unit Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
piątek, 16 kwietnia 2010 17:46

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:

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

 

Zobacz podobne artykuły