2012-01-31 12 views
8

Estoy poniendo las pruebas de PHPUnit en un proyecto existente. Las variables constantes globales se usan ampliamente. En mi unidad, las funciones de prueba están fallando porque las variables globales son nulas. He aquí un ejemplo de una prueba nolas variables globales son nulas cuando se usa PHPUnit

static $secret_key = "a secret Key"; 
class secret_key_Test extends PHPUnit_Framework_TestCase 
{ 
    function test_secret_key() 
    { 
     global $secret_key; 
     $this->assertEquals($secret_key, "a secret Key"); 
    } 
} 

>> Failed asserting that 'a secret Key' matches expected null 

Cualquier ayuda sería muy apreciada

Actualización: He intentado quitar estática y añadiendo

protected $backupGlobals = FALSE; 

Para la declaración de clase sin éxito.

+0

Hehe, variables globales es lo que debería deshacerse cuando comience la prueba unitaria por aislamiento y estado – zerkms

+0

Por cierto, probablemente quiera decir 'global $ clave_secreta =" una clave secreta ";' no 'estática', ¿no es así? – zerkms

+0

La palabra clave 'static' solo debe eliminarse. 'global' solo tiene sentido dentro de una función/método. –

Respuesta

3

Debe preguntar PHPUnit no globales de copia de seguridad

protected $backupGlobals = FALSE; 

como se dice en el artículo original de S. Bergmann: http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

O asegúrese de que estén configurados durante el proceso de arranque mediante 'bootstrap.php' o algún módulo que cargue antes de que PHPUnit empiece a ejecutar los métodos de prueba reales. –

+0

Esto no resolvió mi problema – rp90

+0

@ rp90: necesitamos ver su código real, entonces – zerkms

7

Esta respuesta no funciona. Hice una pregunta prácticamente idéntica here y terminé con una respuesta que tiene más sentido; no puede sobrescribir la propiedad protegida $ backupGlobals en la Clase de prueba que verá PHPUnit. Si se está ejecutando en la línea de comando, parece que puede hacer que Globals funcione creando un archivo de configuración xml y configurando backupGlobals a falso allí.

EDITAR: Necesita declarar $ secret_key tanto global como asignarle un valor en el espacio global al usar PHPUnit. PHP establece de manera predeterminada la colocación de variables inicializadas globalmente en el espacio de nombres global, pero PHPUnit cambia este valor predeterminado al hacer copias de seguridad globales.

los siguientes cambios deben ocurrir:

global $secret_key; // Declaring variable global in global namespace 
$secret_key = "a secret Key"; // Assigning value to global variable 

El código debería funcionar ahora.

Cuestiones relacionadas