2012-10-16 64 views
-2

這是我在PHPUnit中的自定義函數。PHP或PHPUnit自定義函數

protected function checkIfSetGlobalTest($VARIABLE, $ASSIGNMENT) { 
    global $VARIABLE; 
    if(!isset($VARIABLE) == true) { 
     $VARIABLE = $ASSIGNMENT; 
    } 
} 

這是我調用該函數的時候。

protected function setUp() { 
    $this->checkIfSetGlobalTest("$URL", "http://google.com"); 
    $this->setBrowser("*firefox"); 
    $this->setBrowserUrl($URL); 

} 

我想查看是否設置了變量,如果不是,則將該URL分配給該變量。像下面的代碼一樣。

global $URL; 
if(!isset($URL) == true) { 
    $URL = "http://google.com"; 
} 
+2

強制性 '不使用全局' 的評論,尤其是看到你如何將'$ VARIABLE'傳遞給你的第一個函數。如果您使用PHPUnit,爲什麼不使用它的'assert'函數? –

回答

0

您需要通過參考,以你的函數中修改它傳遞的第一個變量:

protected function checkIfSetGlobalTest(&$VARIABLE, $ASSIGNMENT) 

而且,你不應該通過你的變量時,你通過它引用,或將通過價值。

$this->checkIfSetGlobalTest($URL, "http://google.com"); 

做這些,你將不再需要使用global在功能檢查是否設置。

+0

我使用全球性的,因爲我在我的TestSuite.xml文件中使用$ URL變量。如果在我逐個運行測試用例而不是TestSuite時未設置它,我想將該變量分配給某些東西。 – yan

+0

如果您通過參考傳遞,則不需要全局。 $ URL變量按原樣傳遞給函數,您不需要知道任何變量名稱。 – gcochard

1

聽起來像是你需要variable-variables.

您可以使用此功能是這樣的:

protected function checkIfSetGlobalTest($VARIABLE, $ASSIGNMENT) { 
    $VARIABLE = ltrim($VARIABLE, '$'); 
    global $$VARIABLE; 
    if(!isset($$VARIABLE) == true) { 
     $$VARIABLE = $ASSIGNMENT; 
    } 
} 

或只使用$GLOBALS superglobal

protected function checkIfSetGlobalTest($VARIABLE, $ASSIGNMENT) { 
    $VARIABLE = ltrim($VARIABLE, '$'); 
    if(!isset($GLOBALS[$VARIABLE]) == true) { 
     $GLOBALS[$VARIABLE] = $ASSIGNMENT; 
    } 
}