Testy i debugowanie w PHP
1. Wprowadzenie
Testowanie i debugowanie w PHP jest kluczowe, aby tworzone aplikacje działały poprawnie, były stabilne i bezpieczne. Testowanie pozwala wykrywać błędy logiczne i nieprawidłowe dane, a debugowanie ułatwia analizę problemów i ich szybkie naprawienie.
2. Wyświetlanie błędów
a) Konfiguracja PHP
- W pliku
php.inimożna włączyć wyświetlanie błędów:
- W kodzie PHP można to zrobić dynamicznie:
b) Typowe funkcje do debugowania
var_dump($zmienna)– wyświetla typ i wartość zmiennej.print_r($zmienna)– bardziej czytelny podgląd tablic i obiektów.debug_backtrace()– pokazuje ścieżkę wywołań funkcji w momencie błędu.get_defined_vars()– wyświetla wszystkie aktualnie zdefiniowane zmienne.
Przykład:
3. Logowanie błędów
a) Logi PHP
Można logować błędy do pliku zamiast wyświetlać je użytkownikowi:
b) Zalety
- Bezpieczne – użytkownik nie widzi wewnętrznych informacji.
- Ułatwia analizę problemów w środowisku produkcyjnym.
4. Debugowanie krok po kroku
a) xdebug
Xdebug to rozszerzenie PHP, które pozwala na:
- debugowanie krok po kroku w IDE (np. PhpStorm, VSCode),
- śledzenie stosu wywołań i wartości zmiennych,
- profilowanie aplikacji i analizę wydajności.
Przykład użycia w VSCode:
- Zainstaluj Xdebug.
- Skonfiguruj IDE do nasłuchiwania portu Xdebug.
- Ustaw breakpointy i uruchom debugowanie w przeglądarce.
5. Testy jednostkowe (Unit Testing)
a) PHPUnit
PHPUnit to standardowa biblioteka do testów jednostkowych w PHP.
- Pozwala testować funkcje, klasy i metody w izolacji.
- Ułatwia wykrywanie regresji i błędów logicznych.
Przykład prostego testu:
Podstawowe asercje w PHPUnit:
$this->assertEquals($expected, $actual)– sprawdza równość.$this->assertTrue($condition)– sprawdza, czy warunek jest prawdziwy.$this->assertFalse($condition)– sprawdza, czy warunek jest fałszywy.$this->assertNull($variable)– sprawdza, czy zmienna jest null.
6. Testowanie funkcjonalne i integracyjne
- Testy funkcjonalne sprawdzają, czy cała funkcja aplikacji działa zgodnie z oczekiwaniami (np. logowanie użytkownika).
- Testy integracyjne sprawdzają współpracę wielu komponentów (np. PHP + baza danych).
W tym celu można używać:
- PHPUnit + narzędzia do testów HTTP (np. Guzzle),
- narzędzi do symulowania środowiska (Docker + testowe bazy danych).
7. Debugowanie w praktyce
a) Najczęstsze techniki:
- Print Debugging:
var_dump()iprint_r()w miejscach, gdzie spodziewany jest błąd. - Breakpoints w IDE: pozwala zatrzymać program i sprawdzić wartości zmiennych.
- Logowanie błędów: używanie
error_log()w krytycznych punktach kodu. - Try / Catch: obsługa wyjątków i ich logowanie:
8. Dobre praktyki
- W środowisku produkcyjnym wyłącz wyświetlanie błędów (
display_errors = Off) i loguj je do pliku. - Stosuj testy jednostkowe i integracyjne dla krytycznych funkcji.
- Używaj Xdebug w środowisku developerskim.
- Nie zostawiaj
var_dumpaniprint_rw kodzie produkcyjnym. - Wprowadzaj kontrolowane wyjątki (
try/catch) i czytelne komunikaty błędów.