我正在運行CakePHP 2.8.X,並且正在嘗試爲模型函數編寫單元測試。模擬CakePHP中模型方法中的方法
我們打電話給模型Item
,我試圖測試它的getStatus
方法。
但是,該模型在getStatus
方法內調用其find
。
因此,像這樣:
class Item extends Model
{
public function getStatus($id) {
// Calls our `$this->Item-find` method
$item = $this->find('first', [
'fields' => ['status'],
'conditions' => ['Item.id' => $id]
]);
$status = $item['status'];
$new_status = null;
// Some logic below sets `$new_status` based on `$status`
// ...
return $new_status;
}
}
邏輯設置「$new_status
」是一個有點複雜,這就是爲什麼我想寫一些測試它。
但是,我不完全確定如何覆蓋Item::getStatus
內的find
呼叫。
通常當我需要模擬模型的功能,我使用$this->getMock
加上method('find')->will($this->returnValue($val_here))
,但我並不想完全模仿我Item
因爲我想測試其實際getStatus
功能。
也就是說,在我的測試功能,我將被調用:
// This doesn't work since `$this->Item->getStatus` calls out to
// `$this->Item->find`, which my test suite doesn't know how to compute.
$returned_status = $this->Item->getStatus($id);
$this->assertEquals($expected_status, $returned_status);
那麼,如何溝通,我真正Item
模型我的測試中,它應該覆蓋其內部調用其find
方法?
您可以接受你自己的答案讓其他人知道你已經解決您的問題。幹得好,這對其他人很有用。 – vascowhite