2012-01-31 18 views
8

Sto inserendo il test PHPUnit in un progetto esistente. Le variabili di costanti globali sono ampiamente utilizzate. Nella mia unità le funzioni di test stanno fallendo perché le variabili globali sono nulle. Ecco un esempio di un test non averle variabili globali sono nulle quando si utilizza 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 

Qualsiasi aiuto sarebbe molto apprezzato

Update: Ho provato a rimuovere statica e l'aggiunta di

protected $backupGlobals = FALSE; 

Per la dichiarazione della classe senza successo.

+0

Hehe, le variabili globali sono ciò di cui dovresti liberarti quando avvii i test unitari a causa dell'isolamento e dichiari – zerkms

+0

Btw, probabilmente volevi dire "global $ secret_key =" una chiave segreta ";' not 'static', non è vero? – zerkms

+0

La parola chiave 'static' dovrebbe essere semplicemente rimossa. 'global' ha senso solo all'interno di una funzione/metodo. –

risposta

3

Si dovrebbe chiedere phpunit non globali di backup

protected $backupGlobals = FALSE; 

come si dice nell'articolo originale da S. Bergmann: http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

O assicurati che siano impostati durante il processo di bootstrap da 'bootstrap.php' o qualche modulo che carica prima che PHPUnit inizi ad eseguire i metodi di test effettivi. –

+0

Questo non ha risolto il mio problema – rp90

+0

@ rp90: abbiamo bisogno di vedere il tuo codice reale quindi – zerkms

7

Questa risposta non funziona. Ho fatto una domanda praticamente identica here e ho concluso con una risposta che ha più senso; non è possibile sovrascrivere la proprietà protetta $ backupGlobals nella classe di test che PHPUnit vedrà. Se si sta eseguendo sulla riga di comando, sembra che si possa far funzionare Globals creando un file di configurazione xml e configurando backupGlobals come falso.

MODIFICA: è necessario dichiarare $ secret_key sia globale che assegnare un valore ad esso nello spazio globale quando si utilizza PHPUnit. Il valore predefinito di PHP è inserire le variabili inizializzate globalmente nello spazio dei nomi globale, ma PHPUnit modifica questo valore predefinito quando esegue il backup dei globali!

I seguenti cambiamenti devono accadere:

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

Il codice dovrebbe funzionare ora.

Problemi correlati