我正在运行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