Generator phpunit.xml
Gotowa konfiguracja PHPUnit
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćPodaj dalej
Komuś też się przyda?
Wyślij znajomemu link. Otworzy narzędzie od razu, bez konta i bez opłat.
Generator pliku phpunit.xml
PHPUnit to najpopularniejszy framework testów jednostkowych w PHP. Plik phpunit.xml określa, które testy uruchomić i jak zbierać pokrycie kodu.
Najważniejsze sekcje
| Sekcja | Znaczenie |
|---|---|
| bootstrap | plik ładujący autoloader |
| testsuites | katalogi z testami |
| source/include | kod mierzony pod kątem pokrycia |
| php / ini | ustawienia środowiska testów |
Przykład
Konfiguracja wskazuje katalog tests/Unit i mierzy pokrycie katalogu app. Uruchomienie: vendor/bin/phpunit lub php artisan test w Laravelu.
Pokrycie kodu
Do pomiaru pokrycia potrzebny jest Xdebug lub PCOV. Bez nich testy się uruchomią, ale raport pokrycia nie powstanie. Raport HTML wygenerujesz flagą --coverage-html.
Jak działa generator phpunit.xml
Generator pracuje w całości po stronie przeglądarki i nie opiera się na żadnej tablicy stałych ani zamkniętej liście dozwolonych elementów. To, co wpiszesz w formularzu, jest mapowane jeden do jednego na węzły i atrybuty dokumentu XML: nazwa zestawu staje się wartością atrybutu name, katalog trafia jako treść elementu directory, a ścieżka pojedynczego pliku jako element file. Nie ma tu ukrytych wartości domyślnych, które narzędzie dopisywałoby po swojej stronie.
Puste pola są pomijane w całości. Jeśli nie podasz katalogu pamięci podręcznej, odpowiedni element nie pojawi się w pliku, a PHPUnit zastosuje własne zachowanie domyślne. Dzięki temu wynik jest przewidywalny i wygodny w porównaniach: zmiana jednego pola zmienia dokładnie jedną linię konfiguracji, a reszta dokumentu zostaje bez zmian.
Drugi etap to serializacja drzewa do tekstu z zachowaniem kolejności wymaganej przez schemat, na który wskazuje atrybut xsi:noNamespaceSchemaLocation. PHPUnit waliduje plik przy starcie, więc kolejność sekcji i poprawność nazw atrybutów mają znaczenie — generator pilnuje obu tych rzeczy, ale nie zna wersji frameworka, którą uruchomisz, dlatego nie zagwarantuje, że każdy nowszy atrybut zostanie przyjęty przez starsze wydanie.
Narzędzie nie sięga do repozytorium: nie sprawdza, czy wskazany katalog istnieje, nie wykrywa zainstalowanych rozszerzeń ani nie odczytuje pliku composer.json. Dostajesz dokładnie taką deklarację, jaką wpiszesz, a weryfikacja należy do samego PHPUnit.
Przykład krok po kroku
- Ustalasz punkt wejścia: jeden wpis bootstrap ze ścieżką vendor/autoload.php. Licznik węzłów struktury wynosi 1.
- Dodajesz zestawy testów. Repozytorium ma katalog tests z trzema podkatalogami: Unit, Integration i Functional, więc wpisujesz trzy zestawy, każdy z własnym katalogiem. Licznik: 1 + 3 = 4.
- Wskazujesz kod mierzony pod kątem pokrycia: dwa katalogi, src oraz app. Licznik: 4 + 2 = 6.
- Ustawiasz zachowanie uruchomienia: cacheDirectory w katalogu .phpunit.cache, colors na true, executionOrder na depends,defects (dwie wartości) i stopOnFailure na false. To cztery atrybuty, więc łącznie masz 6 + 4 = 10 wpisów konfiguracji.
- Pomijasz pola, których nie potrzebujesz: nie dodajesz żadnego wpisu do sekcji odpowiedzialnej za zmienne środowiskowe ani nie wykluczasz katalogów. Wynik to plik z 6 węzłami struktury i 4 atrybutami.
- Kontrola deklaracji: gdybyś w kroku trzecim podał wyłącznie katalog src, pokrycie objęłoby jeden katalog z dwóch, czyli deklaracja dotyczyłaby połowy kodu źródłowego, a drugi katalog pozostałby poza raportem.
Elementy i atrybuty konfiguracji — tabela referencyjna
| Element lub atrybut | Znaczenie | Kiedy go ustawiasz |
|---|---|---|
| cacheDirectory | Katalog, w którym PHPUnit trzyma pliki pamięci podręcznej i stan kolejnych uruchomień | Gdy chcesz przyspieszyć powtórne przebiegi i trzymać artefakty poza repozytorium |
| colors | Kolorowanie wyjścia w terminalu | Włączasz lokalnie dla czytelności, wyłączasz w środowisku ciągłej integracji, gdzie liczy się czysty log |
| executionOrder | Kolejność, w jakiej uruchamiane są testy | Gdy chcesz zaczynać od przypadków, które padły w poprzednim przebiegu, zamiast od kolejności plików |
| stopOnFailure | Przerwanie całej serii po pierwszym niepowodzeniu | Przy debugowaniu pojedynczego błędu; w pełnym przebiegu zwykle niepotrzebne |
| failOnWarning | Traktowanie ostrzeżeń jako niepowodzeń | Gdy budujesz twardą bramkę jakości i nie chcesz przepuszczać przebiegów z ostrzeżeniami |
| failOnRisky | Traktowanie testów uznanych za ryzykowne jako niepowodzeń | Gdy chcesz wymusić, aby każdy test faktycznie wykonywał asercje |
| beStrictAboutOutputDuringTests | Traktowanie wyjścia wygenerowanego w trakcie testu jako problemu | Przy testowaniu kodu, który nie powinien nic wypisywać na standardowe wyjście |
| exclude | Wyłączenie wskazanych katalogów z pomiaru pokrycia | Dla kodu generowanego automatycznie, migracji i plików pomocniczych, które zaniżają albo zaburzają odsetek |
Praktyczne wskazówki
- Trzymaj plik w katalogu głównym projektu — PHPUnit szuka konfiguracji w katalogu, z którego go uruchamiasz, więc przenoszenie pliku do podkatalogu wymaga każdorazowego wskazywania go flagą configuration.
- Rozdziel zestawy według czasu wykonania — osobny zestaw dla szybkich testów jednostkowych i osobny dla wolniejszych pozwala uruchamiać ten pierwszy w trakcie pracy, a pełny przebieg zostawić na koniec.
- Nie wskazuj katalogu testów jako źródła pokrycia — jeśli dodasz katalog tests do listy mierzonego kodu, raport policzy również sam kod testów i zafałszuje odsetek.
- Wersjonuj wariant zapasowy, nie plik lokalny — plik z konfiguracją lokalną dopisz do ignorowanych, a do repozytorium wrzuć wariant wspólny dla zespołu, żeby każdy mógł nadpisać ustawienia bez konfliktów.
- Dodaj katalog pamięci podręcznej do ignorowanych — pliki stanu zmieniają się przy każdym przebiegu i zaśmiecają historię zmian.
Ograniczenia narzędzia
- Nie sprawdza ścieżek — generator nie wie, czy wskazany katalog ani plik istnieje. Literówka w nazwie katalogu objawi się dopiero przy uruchomieniu PHPUnit, czasem jako cicho pominięty zestaw testów.
- Nie zna twojego środowiska — nie ustali, czy masz zainstalowane rozszerzenie potrzebne do pomiaru pokrycia ani którą wersję frameworka uruchamiasz, więc nie dobierze pod to ustawień.
- Nie generuje plików towarzyszących — nie tworzy skryptu ładującego, nie instaluje zależności i nie zakłada katalogu na raporty. To wszystko musisz przygotować samodzielnie.
- Nie zastąpi konfiguracji środowiska — zmienne przekazywane z zewnątrz, nadpisywane w potoku ciągłej integracji albo w pliku lokalnym, mogą zmienić zachowanie przebiegu niezależnie od tego, co znajdzie się w wygenerowanym pliku.
Najczęstsze pytania
Po co bootstrap?
Ładuje autoloader Composera, dzięki czemu PHPUnit widzi klasy aplikacji i zależności.
Czym różni się test jednostkowy od funkcjonalnego?
Jednostkowy sprawdza pojedynczą klasę w izolacji, funkcjonalny — działanie całych przepływów, często z bazą danych.
Jak działać z bazą w testach?
Najczęściej używa się SQLite w pamięci lub transakcji, które wycofują zmiany po każdym teście.
Czym różni się phpunit.xml od phpunit.xml.dist?
Plik z rozszerzeniem .dist to wersja wzorcowa wersjonowana w repozytorium, a plik bez tego rozszerzenia to konfiguracja lokalna, która może go nadpisać. Framework sięga po plik lokalny, jeśli istnieje, a w przeciwnym razie korzysta z wariantu wzorcowego.
Dlaczego PHPUnit nie widzi moich testów?
Najczęściej dlatego, że w konfiguracji brakuje zestawu wskazującego właściwy katalog albo pliki testów nie kończą się przyjętym przyrostkiem. Sprawdź też, czy ścieżka w zestawie nie zawiera literówki, bo błędnie wskazany katalog jest po prostu pomijany.
Jak wykluczyć katalog z pomiaru pokrycia?
Dodaj wpis wykluczający wewnątrz sekcji wskazującej mierzony kod, obok katalogów, które mają być liczone. Wykluczenie działa tylko na raport pokrycia — testy z tego katalogu nadal mogą się uruchamiać, jeśli należą do któregoś z zestawów.
Czy mogę uruchomić tylko jeden zestaw testów?
Tak, wystarczy podać flagę testsuite z nazwą zestawu przy uruchomieniu. Dlatego warto nadawać zestawom krótkie, jednoznaczne nazwy — będą widoczne zarówno w wywołaniu, jak i w raporcie.
Po co ustawiać executionOrder?
Pozwala zaczynać przebieg od testów, które padły ostatnio, co skraca pętlę poprawiania błędów. Wartość depends,defects oznacza uwzględnienie najpierw zależności między testami, a następnie przypadków, które zakończyły się niepowodzeniem.