Sytuacja
Używamy PHPUnit w naszym projekcie i używania phpunit.xml
aby upewnić rzeczy jak backupGlobals
jest wyłączony.Konfiguracja PHPUnit (phpunit.xml) - ładowanie w bootstrapie?
Aby dodatkowo zapewnić, że ścieżka dołączania jest ustawiona i automatyczne ładowanie jest aktywne, kaskadujemy również nasze bootstraps testowy. To znaczy, każdy test i alltests-suite ma na szczycie, require_once(__DIR__ . '/../bootstrap.php');
, aż do poziomu folderu podstawowego, gdzie oczywiście czyta się require_once(__DIR__ . '/bootstrap.php');
, a rzeczywisty plik bootstrap znajduje się.
Zasadniczo nasze testy są autonomiczne. Możesz zadzwonić pod dowolny numer AllTests.php
w dowolnym folderze i dowolny *Test.php
samodzielnie, a one będą działać z odpowiednią konfiguracją.
Z wyjątkiem braku. 'Poczekaj chwilę. '
To prawda, jeśli my albo zmusić naszych programistów do korzystania phpunit --configuration=path/to/phpunit.xml
czy są one w folderze z phpunit.xml
(tak, że PHPUnit ciągnie go z bieżącego katalogu roboczego, gdy jest wykonywany).
Czasami niezwykle trudno jest ustalić, dlaczego testy na jednym komputerze dewelopera ulegają awarii i dlaczego działają one na innym. Po prostu zapominamy, że bootstrap nie jest jedyną rzeczą, której potrzebujemy mieć to samo środowisko testowe. Pamiętaj, że ponieważ nie możesz zapomnieć o bootstrapie, jeśli próbowałeś, ponieważ znajduje się on w samych testach, zapominając o innych ustawieniach, zwłaszcza zwykle takich opcjonalnych (jeśli jesteś w folderze z phpunit.xml
, jest on automatycznie pobierany) , jest proste.
W rzeczywistości - zdarzyło się to kilka razy.
Pytanie
Czy istnieje sposób mogę dostarczyć który phpunit.xml
użyć w pliku testowego jest prowadzony takie jak w naszym dogodnie wszechobecnego pliku uruchamiającego, zamiast dostarczania go do PHPUnit wcześniej, możliwe, że za pomocą przełącznika wiersza polecenia lub będąc w jego katalogu ?
pobieżny rzut oka na kod sugeruje odpowiedź brzmi nie - konfiguracja dobrze i wydaje się być ładowany przed Pliki testowe są nawet pociągnął:
[PHPUnit/TextUI/Command.php]
...
if (isset($this->arguments['configuration'])) {
$configuration = PHPUnit_Util_Configuration::getInstance(
$this->arguments['configuration']
);
$phpunit = $configuration->getPHPUnitConfiguration();
...
To ma jakiś sens, zważywszy, że konfiguracja może zawierać testową białą lub czarną listę.
Naprawdę, to nie ma sensu, aby obciążenie próbne filtry w teście bootstrap sama, więc to pół potencjał konfiguracja przez okno z, ale rzeczywiste flagi behawioralne PHPUnit ...
[sample of part of our phpunit.xml]
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
syntaxCheck="false"
processIsolation="false"
colors="true">
... może z wyjątkiem "kolorów" uderza mnie coś, co sam test powinien być w stanie podjąć decyzję na pewnym poziomie.
Nagroda pocieszenia za ...
Prawdą jest, że w tej chwili byłbym szczęśliwy wiedząc, czy mogę nauczyć PHPUnit backupGlobals="false"
z pliku bootstrap, jeśli ktoś zna jakiś sposób.
(Jeśli bezowocne, praktyczna odpowiedź będę dążyć będzie prawdopodobnie skopiować phpunit.xml
do wszystkich podfolderów. Chciałbym uniknąć tego rozwiązania, ponieważ tworzy nadmiarowe kopie, i jeśli kiedykolwiek zdecydujesz się zmienić ustawienie ... tak, ouch!)
Widzimy, naszym problemem jest to, że mamy tę pierwszą zasadę - ale deweloperzy są opowiadani raz i nic nie przypomina o tym, aby to zrobić.Działa 99 na 100 przypadków, gdy chcesz uruchomić cały pakiet testowy, ponieważ musisz upewnić się, że twoje zmiany nie były budowane, i robisz to z katalogu głównego - a potem zapominasz, kiedy chcesz wykonać szybkie ponowne przetestowanie gałęzi katalogu. – pinkgothic
W tym, myślę, że twój punkt # 2 jest bardzo wnikliwy; być może usunięcie AllTests.php w podkatalogach nieco "wymusiłoby" proces myślenia, służy jako przypomnienie 'phpunit.xml'. Dam ci to trochę więcej uwagi i odbijam to od moich kolegów, może to lepsze rozwiązanie. – pinkgothic
Jest to wybór pomiędzy zmianą nawyków a tworzeniem piekła utrzymania (z dużą ilością plików konfiguracyjnych, które muszą być zsynchronizowane). Powodzenia :) –