estoy aprendiendo y explorando las aplicaciones de PHPUnit con PHP 5.2.9 y se han encontrado con el problema de globales. Me he puesto $ backupGlobals a FALSO, incluido el doc '@backupGlobals discapacitados' y esto no parece afectar el comportamiento de PHPUnit de copia de seguridad de las variables globales. ¿Se me escapa algo? ¿Debo modificar el archivo xml de PHPUnit? Crear un bootstrap?PHPUnit y Globals
config.php:
$testString = 'Hello world!';
basicApp.php:
require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\config.php');
class BasicApp {
public $test;
public function __construct() {
global $testString;
$this->test = $testString;
}
public function getTest() {
return $this->test;
}
public function setTest($test){
$this->test = $test;
}
BasicAppTest.php:
require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\BasicApp.php');
class BasicAppTest extends PHPUnit_Framework_TestCase{
protected $testClass;
protected $backupGlobals = FALSE;
protected $backupGlobalsBlacklist = array('testString');
public function SetUp(){
$this->testClass = new BasicApp;
$this->testClass->bootstrap();
}
public function testGlobal(){
echo $this->testClass->getTest();
$this->assertNotNull($this->backupGlobals);
$this->assertFalse($this->backupGlobals);
$this->assertNotEmpty($this->testClass->test);
}
public function testMethods(){
$this->testClass->setTest('Goodbye World!');
echo $this->testClass->getTest();
$this->assertNotNull($this->backupGlobals);
$this->assertNotNull($this->testClass->test);
if (empty($this->testClass->test)) echo 'Method set failed!';
}
}
testGlobal() falla en $ this-> assertNotEmpty ($ this -> testClass-> test), lo que indica que $ this-> backupGlobals está establecido en FALSE y que los globales todavía están siendo respaldados por PHPUnit.
EDIT: Tengo este trabajo al hacer la siguiente cambios-
BasicAppTest.php:
protected $backupGlobals = FALSE; <- REMOVED
protected $backupGlobalsBlacklist = array('testString'); <- REMOVED
config.php:
global $testString; <- ADDED
$testString = 'Hello world!';
estoy anonadado de que esto no tiene ha sido cubierto antes en alguna parte!
es la línea '$ testString mundial;' necesita? Tengo entendido que la palabra clave 'global' en el ámbito global no tiene ningún efecto porque ya se encuentra en el ámbito global. –
@DavidHarkness que no hay manera de saber cuando se escribe el código si se encuentra en el ámbito global o no. El hecho de que esté en el alcance principal del archivo y no dentro de una función no significa que estará en alcance global en el tiempo de ejecución.Si ese archivo está 'include'd dentro de una función, en realidad estará en el alcance de esa función, incluso en el alcance principal del archivo. Por este motivo, generalmente se considera la mejor práctica declarar siempre una variable que desea que sea global como tal con la palabra clave 'global'. De esa forma sabrá que será global sin importar qué. –