ZendFramework i PHPUnit

php-logoAktualna wersja Zend Framework wspomaga tworzenie testów jednostkowych. Wykorzystuje do tego znaną paczkę PHPUnit dostępną w repozytorium PEAR.

Obecnie po utworzeniu naszego projektu opartego o ZF (zf create project nazwa_projektu) i po dodaniu automagicznie nowych kontrolerów (zf create controller nazwa_kontrolera) tworzone są automatycznie puste klasy testujące w katalogu /tests.

Dlaczego warto korzystać z testów jednostkowych?

UnitTesty automatyzują nam testowanie aplikacji. Dzięki nim jesteśmy w stanie natychmiast wychwycić błąd z innych części systemu, gdzie takie błędy nie powinny się pojawiać.
Pomagają również kontrolować postęp tworzenia aplikacji, na zasadzie najpierw unitTest, poźniej implementacja, gdzie takie podejście jest używane w eXtreme Programming. Korzystając z unitTestów możemy stworzyć odpowiednie narzędzia monitorujące dany system na podstawie wyników z testów jednostkowych.

Przygotowanie środowiska

Aby móc skorzystać z przyjemności tworzenia testów jednostkowych najpierw musimy zainstalować paczkę PHPUnit.

  1. Najpierw zaktualizujmy na wszelki wypadek dotychczasowe pakiety PEAR’a:
  2. Dodajemy nowy kanał dla PEAR:
  3. I instalujemy PHPUnit z zależnościami

Jeśli wszystko poszło bez problemów możemy do korzystania z PHPUnit zwiększyć dostępną pamięć dla PHP w pliku ini zmieniając wartość memory_limit na przynajmniej 64M.

Teraz już możemy przejść do samych testów. Do tego celu posłużymy się przykładowym kontrolerem.

  1. Tworzymy kontroler Kontakt:
  2. Nasza hierarchia katalogów w skrócie wygląda teraz tak:
  3. Powinniśmy skonfigurować bootstrap do celów testowych, edytujemy /tests/application/bootstrap.php:
  4. Pozostało nam już tylko zedytować klasę KontaktControllerTest, aby korzystało z naszego bootstrapa, i dopisania prostego testu. Po zmianach powinna klasa wyglądać tak:
  5. Aby nie musieć każdej klasy wywoływać osobno, możemy skonfigurować odpowiednie phpUnit. Przykładowy plik konfiguracyjny /tests/phpunit.xml może wyglądać tak:

Pierwszy test

Powstała klasę testującą możemy już uruchomić. Umieściłem przykładowy test (testIndexAction) sprawdzający czy znajdujemy się we właściwej lokalizacji. W tym celu udajemy się do /tests i wydajemy polecenie:

Dzięki skorzystaniu z pliku konfiguracyjnego xml, nie będziemy musieli dokonywać żadnych modyfikacji podczas dodawania kolejnych klas testujących. Docelowo, można przygotować stronę, która przedstawi nam graficznie jakie klasy działają już prawidłowo.

Możliwości porównań pakietu Zend_Test / PHPUnit możemy znaleźć w dokumentacji.
Mam nadzieję, ze to małe wprowadzenie poszerzy grono programistów korzystających z Zend Framework do używania testów jednostkowych, tak bardzo przydatnych przy większych aplikacjach.