Situazione
Stiamo utilizzando PHPUnit nel nostro progetto e si utilizza un phpunit.xml
per garantire le cose come backupGlobals
è spento.Configurazione PHP (phpunit.xml) - caricamento in un bootstrap?
Per garantire ulteriormente che il percorso di inclusione sia impostato e l'autoloading sia attivo, vengono anche messi in cascata i nostri bootstrap di test. Vale a dire, ogni suite di test e alltests ha uno require_once(__DIR__ . '/../bootstrap.php');
nella parte superiore, fino al livello della cartella di base, dove si legge ovviamente require_once(__DIR__ . '/bootstrap.php');
e il file di bootstrap effettivo risiede.
In sostanza, i nostri test sono autonomi. Puoi chiamare qualsiasi AllTests.php
in qualsiasi cartella e qualsiasi *Test.php
da solo e verranno eseguiti con la configurazione corretta.
Tranne n. 'Aspetta un momento. '
Questo è vero solo se ci sia costringiamo i nostri sviluppatori di utilizzare phpunit --configuration=path/to/phpunit.xml
o sono nella cartella con il phpunit.xml
(in modo che PHPUnit tira fuori dalla directory di lavoro corrente quando viene eseguito).
Occasionalmente, ciò rende incredibilmente difficile determinare perché i test sulla macchina di uno sviluppatore si stanno interrompendo e perché sono in esecuzione su un'altra. Ci vuole solo dimenticare che il bootstrap è non l'unica cosa di cui abbiamo bisogno per avere lo stesso ambiente di test. Tieni presente che dal momento che non puoi dimenticare il bootstrap se lo hai provato, perché è nei test stessi, dimenticando altre impostazioni, specialmente quelle di solito opzionali come quella (se ti trovi nella cartella con lo phpunit.xml
, viene automaticamente estratto) , è facile.
Infatti, è successo un paio di volte.
Domanda
C'è un modo per fornire che phpunit.xml
da utilizzare nel file di test in esecuzione, come ad esempio nel nostro file di bootstrap comodamente onnipresente, piuttosto che fornire a PHPUnit anticipo, essere che con l'interruttore della riga di comando o trovandosi nella sua directory ?
Una rapida occhiata al codice suggerisce la risposta è no - di configurazione veramente bene e sembra essere caricato prima che i file di test sono ancora tirati:
[PHPUnit/TextUI/Command.php]
...
if (isset($this->arguments['configuration'])) {
$configuration = PHPUnit_Util_Configuration::getInstance(
$this->arguments['configuration']
);
$phpunit = $configuration->getPHPUnitConfiguration();
...
che non avere un senso, visto che la configurazione può contenere test white- o blacklist.
Davvero, non avrebbe senso carico di prova filtri nel test bootstrap stesso, in modo che è la metà del potenziale di configurazione fuori dalla finestra con, ma le bandiere reali comportamentali di 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">
... forse con l'eccezione dei "colori" mi sembra una cosa che il test stesso dovrebbe essere in grado di decidere su un certo livello.
Premio di consolazione per ...
Certo, adesso sarei felice di sapere se posso insegnare PHPUnit backupGlobals="false"
dal file di bootstrap, se qualcuno conosce un modo.
(se infruttuosa, la risposta pratica io inseguo sarà probabilmente per copiare il phpunit.xml
in tutte le sottocartelle. Mi piacerebbe per evitare che la soluzione in quanto crea copie ridondanti, e se mai scelto di modificare un'impostazione ... sì, ahi!)
Vedi, il nostro problema è che abbiamo questa prima politica, ma gli sviluppatori lo dicono una volta e non c'è nulla che ricordi loro di farlo.Funziona 99 casi su 100, quando vuoi eseguire l'intera suite di test comunque, perché devi assicurarti che le tue modifiche non siano rivoluzionarie, e lo fai dalla directory root - e poi viene dimenticato quando voglio fare un nuovo test di un ramo di directory. – pinkgothic
In questo, ritengo che il punto 2 sia molto perspicace; forse rimuovere AllTests.php nelle sottodirectory "forzerebbe" il processo di pensiero un po 'meglio, servirà come promemoria di "phpunit.xml". Darò un altro pensiero e lo rimbalzerò dai miei colleghi, forse è la soluzione migliore. – pinkgothic
È una scelta tra cambiare le abitudini e creare un inferno di manutenzione (con molti file di configurazione che devono essere sincronizzati). In bocca al lupo :) –