2012-01-31 51 views
8

我正在將PHPUnit測試放入現有項目中。全局常量變量被廣泛使用。在我的單元測試函數失敗,因爲全局變量爲空。這是一個失敗的測試使用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 

任何幫助,將不勝感激

更新的例子: 我試圖消除靜電和加入

protected $backupGlobals = FALSE; 

到類聲明沒有成功。

+0

呵呵,全局變量是什麼,當你開始由於隔離和狀態進行單元測試時你應該擺脫掉什麼 – zerkms 2012-01-31 01:14:16

+0

btw,你可能想說'global $ secret_key =「一個祕密密鑰」;'不是'static',你不是嗎? – zerkms 2012-01-31 01:17:43

+0

只能刪除'static'關鍵字。 'global'只在函數/方法中有意義。 – 2012-01-31 02:21:17

回答

3

你應該問的PHPUnit不備份全局

protected $backupGlobals = FALSE; 

就像是從S.伯格曼原來的文章中說:http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

或者確保它們在引導過程中由'bootstrap.php'或它在PHPUnit開始執行實際測試方法之前加載的某個模塊設置。 – 2012-01-31 02:20:37

+0

這並沒有解決我的問題 – rp90 2012-01-31 17:03:34

+0

@ rp90:我們需要看到你的真實代碼,然後 – zerkms 2012-01-31 18:34:17

7

這個答案是行不通的。我問了一個幾乎相同的問題here,並得出了一個更有意義的答案;您無法覆蓋PHPUnit將會看到的測試類中的受保護屬性$ backupGlobals。如果您在命令行上運行,似乎您可以通過創建xml配置文件並將backupGlobals設置爲false來讓Globals工作。

編輯:您需要聲明$ secret_key全局,並在使用PHPUnit時在全局空間中爲其指定一個值。 PHP默認將全局初始化變量放入全局名稱空間,但PHPUnit在備份全局變量時更改此默認值!

以下變化需要發生:

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

現在您的代碼應該工作。