2012-05-10 93 views
0

我有這樣的代碼我的單元測試裏面:爲什麼PHPUnit沒有將此函數計算爲已運行?

// $item_id was defined above 
$originalMock = $this->getMock('Item', array('foo'), array(
    $item_id 
)); 

$originalMock->expects($this->once())->method('foo'); 

$originalMock->functionThatCallsFoo(); 

它說我不叫foo可言,即使functionThatCallsFoo & foo從內var_dumping出來。

公用函數和我期望的函數之間有幾個函數調用。我確定沒有靜態函數叫做鏈。 (最初有,但我改變了他們,看看我是否可以在任何得到這個工作)

編輯 我改變了我的電話expects匹配從functionThatCallsFoo直接調用,它仍然沒有奏效的方法。

+0

你沒有在'getMock()'中指定模擬方法的列表。第二個參數應該是'array('foo')'not'null' –

+0

@MikeB「當提供第二個(可選)參數時,只有名稱在數組中的方法被替換爲一個可配置的測試double。其他方法沒有改變。「 http://www.phpunit.de/manual/3.6/en/test-doubles.html我想嘲笑整個班級,因爲有幾個中介功能 –

+0

是的,你的意圖是改變'foo( )「對嗎?你將無法計算你的類中具體的'foo()'方法的調用,只有模擬/存根方法。 –

回答

1

我要回答這個問題,因爲我的代碼存在世界性的問題。希望這個答案能夠成爲一個核對清單,如果其他人在將來遇到類似的問題。

  1. 我的最後一個方法是靜態的,所以我需要使用staticExpects
  2. 我的靜態調用使用自我,而不是預計::但是我需要使用靜態::(PHP> = 5.3)
  3. 靜: :不能用於私人功能,不像自我::

最後,我現在可以看到爲什麼靜態函數是邪惡的。

相關問題