2012-01-31 11 views
8

PHPUnitのテストを既存のプロジェクトに入れています。グローバル定数変数は広く使用されています。私のユニットでは、グローバル変数がnullなので関数が失敗しています。ここではすべてのヘルプは大幅にPHPUnitを使用している場合、グローバル変数はnullです

アップデートをいただければ幸いです

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 

失敗テストの例は次のとおりです。私は除電し、成功せずに、クラス宣言に

protected $backupGlobals = FALSE; 

を追加しようとしている 。それはS.バーグマンから元の記事の中で述べているよう

+0

グローバル変数は、隔離と状態 – zerkms

+0

Btwのために単体テストを開始するときに取り除かなければならないものです。おそらく 'global $ secret_key =" secret key ";' 'static''ではなく、あなたはしませんでしたか? – zerkms

+0

'static'キーワードを削除するだけです。 'global'は関数/メソッドの内部でのみ意味があります。 –

答えて

3

バックアップグローバル

protected $backupGlobals = FALSE; 

にないのPHPUnitを尋ねる必要があります。http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

または、ブートストラッププロセス中に 'bootstrap.php'またはPHPUnitが実際のテストメソッドの実行を開始する前にロードするモジュールによってそれらが設定されていることを確認してください。 –

+0

これは私の問題を解決しませんでした – rp90

+0

@ rp90:私たちはあなたの実際のコードを参照する必要があります – zerkms

7

この答えは動作しません。私は実質的に同一の質問hereを尋ね、より理にかなった答えで巻いた。 PHPUnitに表示されるテストクラスの保護されたプロパティ$ backupGlobalsを上書きすることはできません。コマンドラインで実行している場合は、xml構成ファイルを作成してbackupGlobalsをfalseに設定することで、Globalsを動作させることができます。

EDIT:PHPUnitを使用する場合、$ secret_keyをグローバルに宣言し、グローバルスペースに値を代入する必要があります。 PHPはデフォルトでグローバルに初期化された変数をグローバル名前空間に配置することになりますが、グローバルをバックアップするときにPHPUnitはこのデフォルトを変更します!

次の変更が発生する必要があります。

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

あなたのコードが動作するようになりました。

関連する問題