मैं PHP 5.2.9 के साथ PHPUnit के अनुप्रयोगों को सीख रहा हूं और खोज रहा हूं और ग्लोबल्स समस्या में भाग गया हूं। मैंने FALSE में $ बैकअपग्लोबल्स सेट किए हैं, जिसमें '@backupGlobals अक्षम' दस्तावेज़ शामिल है और यह ग्लोबल्स के PHPUnit के बैक अप के व्यवहार को प्रभावित नहीं करता है। क्या मुझे कुछ याद आ रही है? क्या मुझे PHPUnit की XML फ़ाइल को बदलने की आवश्यकता है? बूटस्ट्रैप बनाएं?PHPUnit और Globals
config.php:
$testString = 'Hello world!';
basicApp.php:
require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\config.php');
class BasicApp {
public $test;
public function __construct() {
global $testString;
$this->test = $testString;
}
public function getTest() {
return $this->test;
}
public function setTest($test){
$this->test = $test;
}
BasicAppTest.php:
require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\BasicApp.php');
class BasicAppTest extends PHPUnit_Framework_TestCase{
protected $testClass;
protected $backupGlobals = FALSE;
protected $backupGlobalsBlacklist = array('testString');
public function SetUp(){
$this->testClass = new BasicApp;
$this->testClass->bootstrap();
}
public function testGlobal(){
echo $this->testClass->getTest();
$this->assertNotNull($this->backupGlobals);
$this->assertFalse($this->backupGlobals);
$this->assertNotEmpty($this->testClass->test);
}
public function testMethods(){
$this->testClass->setTest('Goodbye World!');
echo $this->testClass->getTest();
$this->assertNotNull($this->backupGlobals);
$this->assertNotNull($this->testClass->test);
if (empty($this->testClass->test)) echo 'Method set failed!';
}
}
testGlobal() $ this-> assertNotEmpty पर विफल रहता है (यह $ -> testClass-> परीक्षण), यह इंगित करता है कि $ यह-> बैकअपग्लोबल्स FALSE पर सेट है और वह ग्लोबल्स अभी भी PHPUnit द्वारा बैक अप ले रहे हैं।
संपादित करें: मैं निम्नलिखित बदलाव
BasicAppTest.php बनाकर इस काम कर रहे है:
protected $backupGlobals = FALSE; <- REMOVED
protected $backupGlobalsBlacklist = array('testString'); <- REMOVED
config.php:
global $testString; <- ADDED
$testString = 'Hello world!';
मैं चुप है कि इस नहीं है कर रहा हूँ कहीं से पहले कवर किया गया है!
लाइन' वैश्विक $ testString है:
bootstrap.php
साथ: यहाँ GitHub से onlab की मिसाल है? मेरी समझ यह है कि वैश्विक दायरे में 'वैश्विक' कीवर्ड का कोई प्रभाव नहीं पड़ता क्योंकि आप पहले से ही वैश्विक दायरे में हैं। –@ डेविड हार्केनेस आपके पास यह जानने का कोई तरीका नहीं है कि आप कोड लिख रहे हैं कि आप वैश्विक दायरे में हैं या नहीं। सिर्फ इसलिए कि आप फ़ाइल के मुख्य दायरे में हैं और फ़ंक्शन के अंदर नहीं, इसका मतलब यह नहीं है कि आप रनटाइम पर वैश्विक दायरे में होंगे।यदि उस फ़ाइल में फ़ंक्शन के भीतर 'शामिल' है, तो आप वास्तव में उस फ़ंक्शन के दायरे में होंगे, यहां तक कि फ़ाइल के मुख्य दायरे में भी। इस कारण से इसे आम तौर पर 'वैरिएबल' कीवर्ड के साथ वैश्विक रूप से एक वैरिएबल घोषित करने का सर्वोत्तम अभ्यास माना जाता है। इस तरह आप जानते हैं कि यह वैश्विक होगा चाहे कोई फर्क नहीं पड़ता। –