我有以下的模擬對象:PHP模擬 - >預計,()不報告不叫當錯誤
$permutator = $this->getMockBuilder('PermutationClass',
array('get_permutation'))->disableOriginalConstructor()->getMock();
$permutator->expects($this->at(0))
->method('get_permutation')
->will($this->returnCallback(function($praram1) {
return true;
}));
$permutator->expects($this->at(1))
->method('get_permutation')
->will($this->returnCallback(function($praram1) {
return true;
}));
然而,我所經歷的是,如果由於某種原因在調用「1」永遠不會被執行,那麼沒有錯誤報告關於永遠不會滿足的期望。
如果我添加以下代碼:預計在右側前:
$permutator->expects($this->exactly(2))->method('get_permutation');
那麼什麼情況是,如果給定的期望從來沒有所謂的錯誤會被報告。但是,這裏發生的是由於某種原因,這使得模擬對象的返回值爲NULL,因爲我沒有設置它。如果我這樣設置:
$permutator->expects($this->exactly(2))->method('get_permutation')->will($this->returnValue("THIS SHOULD NEVER BE RETURNED"));
然後,這將成爲該函數的所有預期方法調用的返回值。因此,在(0)和(1)就得到執行(我設置一些打印語句),但返回的值是通過這個重寫:
$permutator->expects($this->exactly(2))->method('get_permutation');
我設法得到預期的行爲使用:
$permutator->expects($this->exactly(2))
->method('get_permutation')
->will($this->onConsecutiveCalls(
$this->returnCallback(function($praram1) {
return true;
}),
$this->returnCallback(function($praram1) {
return false;
})
)
);
我得到的是爲什麼模擬對象不會抱怨說,當我明確設定期望時,$ this-> at(1)從來不會被調用?
您確定該方法沒有被調用嗎?我用$ this-> at()做了一個簡單的例子,如果方法只被調用一次,它就會失敗。我認爲你的代碼中還有其他事情正在發生。 – Schleis