2014-04-03 74 views
1

我們試圖將單元測試添加到現有的應用程序。我們願意在某種程度上進行重構,但是變量的約束存在一個問題。mysqli的嘲諷行爲bind_result

基本上我們使用mysqli的bind_result方法廣泛地使用PHP變量綁定到mysqli結果。

問題是:我們可以嘲笑這種行爲嗎?我的意思是,將變量直接寫入方法的上下文中。

另一種選擇是圍繞mysqli編寫一個包裝並更改每個方法調用,但我們試圖避免它,因爲在給定的時間範圍內要完成的工作太多。

回答

1

我不知道我在想什麼,我忘了參考參考。我將不得不爲這個類寫一個特定的模擬,但它應該工作。

class mysqli_stmt_mock { 

     private $references = array(); 

     public function bind_result(&$var){ 
     $this->references[] = &$var; 
     } 

     public function writeOnReferences(){ 
      foreach($this->references as &$ref){ 
      $ref = 'test_string1'; 
     } 
    } 
} 

$test = new mysqli_stmt_mock(); 

$var1 = 'foo'; 
$var2 = 'foo2'; 

$test->bind_result($var1); 
$test->bind_result($var2); 

print_r($var1); 
print_r($var2); 

$test->writeOnReferences(); 

print_r($var1); 
print_r($var2);