2012-01-31 15 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

+0

बीटीडब्ल्यू के कारण यूनिट-परीक्षण शुरू करते समय छुटकारा पाना चाहिए, आप शायद 'वैश्विक $ secret_key = "एक गुप्त कुंजी" कहना चाहते हैं,' स्थिर 'नहीं, क्या तुमने नहीं किया – zerkms

+0

'स्थिर 'कीवर्ड को हटा दिया जाना चाहिए। 'वैश्विक' केवल एक समारोह/विधि के भीतर समझ में आता है। –

उत्तर

3

आप PHPUnit बैकअप वैश्विक

protected $backupGlobals = FALSE; 

के लिए नहीं पूछना चाहिए जैसे कि यह एस Bergmann से मूल लेख में कहा गया है: http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html

+0

है या सुनिश्चित करें कि वे बूटस्ट्रैप प्रक्रिया के दौरान 'bootstrap.php' द्वारा सेट किए गए हैं या कुछ मॉड्यूल जो PHPUnit वास्तविक परीक्षण विधियों को निष्पादित करना प्रारंभ करने से पहले लोड करता है। –

+0

इससे मेरी समस्या हल नहीं हुई – rp90

+0

@ rp90: हमें आपके वास्तविक कोड को देखने की आवश्यकता है तो – zerkms

7

इस उत्तर काम नहीं करता। मैंने एक समान रूप से समान प्रश्न here से पूछा और एक उत्तर के साथ घायल हो गया जो अधिक समझ में आता है; आप टेस्ट क्लास में संरक्षित संपत्ति $ बैकअपग्लोबल्स को ओवरराइट नहीं कर सकते हैं जो PHPUnit देखेंगे। यदि आप कमांड लाइन पर चल रहे हैं, तो ऐसा लगता है कि आप xml कॉन्फ़िगरेशन फ़ाइल बनाकर और बैकग्लोबल्स को झूठी पर सेट करके ग्लोबल्स को काम करने के लिए प्राप्त कर सकते हैं।

संपादित करें: आपको PHPUnit का उपयोग करते समय वैश्विक स्तर पर $ secret_key घोषित करने और वैश्विक मान में इसे एक मूल्य आवंटित करने की आवश्यकता है। ग्लोबल नेमस्पेस वैरिएबल को ग्लोबल नेमस्पेस में रखने के लिए PHP डिफ़ॉल्ट है, लेकिन ग्लोबल्स का बैक अप लेने पर PHPUnit इस डिफ़ॉल्ट को बदलता है!

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

आपका कोड अब काम करना चाहिए:

निम्न परिवर्तन होने की जरूरत है।