PHPUnit-Konfiguration (phpunit.xml) — be-in ein bootstrap?
Situation
Sind wir mit PHPUnit in unser Projekt und sind mit einem phpunit.xml
um sicherzustellen, dass alles wie backupGlobals
ausgeschaltet ist.
Weiter gewährleistet der include-Pfad gesetzt ist, und automatisches laden aktiv ist, werden wir auch cascade unser test startet. Das heißt, jeder test und alltests-suite hat eine require_once(__DIR__ . '/../bootstrap.php');
an der Spitze, den ganzen Weg bis zu der Basis-Ordner-Ebene, wo es offensichtlich liest require_once(__DIR__ . '/bootstrap.php');
, und die eigentliche bootstrap-Datei befindet.
Im wesentlichen unsere tests sind autonom. Sie anrufen können AllTests.php
in jedem Ordner und jeder *Test.php
von selbst, und Sie werden ausführen, mit der richtigen Konfiguration.
Ausnahme keine. 'Warten Sie einen moment.'
Ist nur wahr, wenn wir entweder Kraft unsere Entwickler phpunit --configuration=path/to/phpunit.xml
oder Sie sind in den Ordner mit der phpunit.xml
(so dass PHPUnit zieht es aus dem aktuellen Arbeitsverzeichnis, wenn es ausgeführt wird).
Gelegentlich, das macht es unglaublich schwer zu bestimmen, warum tests auf einer Entwickler-Maschine brechen und warum Sie auf einem anderen. Es dauert einfach zu vergessen, dass der bootstrap nicht das einzige, was wir brauchen, um die gleiche Testumgebung. Halten Sie im Verstand, da konnte Sie nicht vergessen, die bootstrap-wenn Sie versucht haben, weil es in den tests selbst, zu vergessen, andere Einstellungen, insbesondere der Regel-optional, wie die (wenn Sie in den Ordner mit der phpunit.xml
ist, wird es automatisch gezogen), ist einfach.
In der Tat - es ist ein paar mal passiert.
Frage
Gibt es eine Möglichkeit, die ich liefern kann, die phpunit.xml
zur Verwendung in der test-Datei ausführen, wie in unseren günstig allgegenwärtig bootstrap-Datei, anstatt zu liefern, um PHPUnit vorher, sei es durch Befehl-Linie Schalter oder indem Sie in seinem Verzeichnis ?
Einem kurzen Blick auf den code legt nahe, die Antwort ist Nein - Konfiguration gut und wirklich scheint geladen zu werden, bevor die test-Dateien sind selbst gezogen:
[PHPUnit/TextUI/Command.php]
...
if (isset($this->arguments['configuration'])) {
$configuration = PHPUnit_Util_Configuration::getInstance(
$this->arguments['configuration']
);
$phpunit = $configuration->getPHPUnitConfiguration();
...
Dass macht Sinn, gegeben, dass die Konfiguration enthalten kann test white - oder blacklists.
Wirklich, es würde keinen Sinn machen, laden testen Filter im test bootstrap selbst, so dass die Hälfte der möglichen Konfiguration aus dem Fenster, aber die tatsächlichen Verhaltens-flags von 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">
...vielleicht mit Ausnahme von "Farben" kommt mir als etwas, dass der test selbst sollte in der Lage sein, zu entscheiden, auf einer bestimmten Ebene.
Trostpreis für...
Zugegeben, jetzt würde ich gerne nur wissen, ob ich unterrichten kann, PHPUnit backupGlobals="false"
von der bootstrap Datei, falls es jemand kennt einen Weg.
(Wenn fruchtlos, ist die praktische Antwort, ich werde verfolgen, wird es wahrscheinlich sein, kopieren Sie die phpunit.xml
in alle Unterordner. Ich möchte vermeiden, dass die Lösung, da Sie es schafft redundante Kopien, und sollten wir jemals wählen, um die Einstellungen zu ändern... ja, Autsch!)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Direkte Antwort: Nein, Sie kann das tun.
Längere Geschichte - diese Art von problem besser gelöst, indem die Gewohnheiten von Entwicklern.
Hier ist, wir tun es:
Tun es wie dieses aufgeben bedeutet die Freiheit zu starten PHPUnit aus einem beliebigen Verzeichnis, aber um ehrlich zu sein - ich habe nicht das Gefühl, wie das ist, ein Verlust auf alle.
Die Gewinne sind viel größer: die Menge des housekeeping-code wird reduziert, die Entwickler können nicht vergessen alles, und die Ergebnisse sind daher konsistent.
phpunit.xml
. Ich werde geben, dass ein paar mehr Gedanken und abprallen es von meinem Kollegen, vielleicht ist das die bessere Lösung.Meine Lösung ist das hinzufügen einer bash-Funktion
Dann fügen Sie diese an alle dev .bashrc-Dateien, und Sie können wechseln zu benutzen.
Wir nennen Ihnen aus
vim
so musste ich dies hinzufügen.vimrc
:set shellcmdflag=-ic
Dann fügen Sie
nmap ;t :! phpu %
zum ausführen der test-Datei, die Sie gerade in.Könnte man update das start-script (Windows bat-Datei oder shell auf *nix), und die Logik, in der es zu konfigurieren, um den Speicherort der phpunit.xml. Wenn es sich im aktuellen Verzeichnis befindet, benutzen Sie es, andernfalls zeigen Sie auf das Haupt.
Ich Stimme auch mit Anti jedoch, dass alle tests sollten immer ausgeführt werden, wie Sie wollen, um sicherzustellen, dass die änderungen auch in einem Verzeichnis verzweigen, wirken sich nicht auf andere code. Deshalb führen Sie immer von der Spitze des Baumes. Dies erfordert auch, dass Sie den test ausführen schnell, aber ich habe nicht wirklich ein problem gehabt mit PHPUnit auf.
Aufrechterhaltung der PHPUnit.xml in jedem Verzeichnis wäre ein Wartungs-Albtraum, es sei denn, ist wurde symbolisch verlinkt aus andere Wege, um sicherzustellen, dass es war nur eine tatsächliche Datei.