Ich lerne und erkunde Anwendungen von PHPUnit mit PHP 5.2.9 und stoße auf das globale Problem. Ich habe $ backupGlobals auf FALSE gesetzt, das doc '@backupGlobals disabled' eingeschlossen und dies scheint das Verhalten von PHPUnits Backup der Globals nicht zu beeinflussen. Gibt es etwas, das mir fehlt? Muss ich die XML-Datei von PHPUnit ändern? Erstellen Sie einen Bootstrap?
config.php:
%Vor%basicApp.php:
%Vor%BasicAppTest.php:
%Vor%testGlobal () scheitert an $ this- & gt; assertNotEmpty ($ this- & gt; testClass- & gt; test), was darauf hinweist, dass $ this- & gt; backupGlobals auf FALSE gesetzt ist und dass globale Dateien immer noch von PHPUnit gesichert werden.
EDIT: Ich habe das funktioniert, indem ich die folgenden Änderungen vorgenommen habe -
BasicAppTest.php:
%Vor%config.php:
%Vor%Ich bin verblüfft, dass das vorher noch nicht irgendwo behandelt wurde!
In Ihrem Testfall definieren Sie eine neue $backupGlobals
-Eigenschaft, die PHPUnit nicht sehen kann. Da die Eigenschaft geschützt ist, könnten Sie sie im Konstruktor auf false
setzen, aber PHPUnit verwendet seine Konstruktoren, um Informationen zur Ausführung der Testmethode zu übergeben. Erstellen Sie statt dessen eine phpunit.xml
Konfigurationsdatei , um den backupGlobals
Eigenschaft zu false
.
In Ihren Bearbeitungen und Kommentaren haben Sie auf eine Problemumgehung für das Problem hingewiesen (das explizite Deklarieren von Globals in der getesteten Anwendung). In onlab's Kommentar zu einem PHPUnit-Problem erklärt er das Verhalten: wenn man eine Datei in eine Funktion einfügt, PHP stellt Globals aus den enthaltenen Dateien in den Funktionsumfang. PHPUnit lädt Dateien in einer Funktion, und obwohl es versucht, Globals zu extrahieren, schlägt es in den Fällen fehl, die ich ausprobiert habe.
Leider konnte ich die Probleme meines Altsystems in minimalen Testfällen nicht reproduzieren (und ich hatte Schwierigkeiten, deine zu verstehen), und deshalb kann ich die Erklärung nicht wirklich bestätigen. Aber sein vorgeschlagener Workaround hat mir geholfen: eine Bootstrap-Datei mit der Option --bootstrap
zu liefern; Deklarieren Sie jedes globale Element, das von den getesteten Teilen Ihrer Anwendung verwendet wird. Dies vermeidet die Notwendigkeit, die Anwendung zu modifizieren, um sie zu testen. Hier ist das Beispiel von onlab von GitHub:
mit bootstrap.php
: