CakePHP模拟模型动态加载到控制器中
我正在为我的控制器编写一些单元测试,在控制器中模拟模型时遇到了一些问题 一些代码:CakePHP模拟模型动态加载到控制器中,cakephp,mocking,phpunit,Cakephp,Mocking,Phpunit,我正在为我的控制器编写一些单元测试,在控制器中模拟模型时遇到了一些问题 一些代码: class ExampleController extends AppController { public function some() { $this->loadModel('ModelA'); $this->loadModel('ModelB'); //this I want to mock $modelAVal
class ExampleController extends AppController {
public function some()
{
$this->loadModel('ModelA');
$this->loadModel('ModelB');
//this I want to mock
$modelAVal = $this->ModelA->someFunctionFromModel($param);
$modelBVal = $this->ModelB->ModelCDependentFromModelB->someFunction($param);
}
}
在我的controllertestcase中,我尝试使用以下代码:
public function testSome() {
$mock = $this->generate('Example', [
'models' => ['ModelA', 'ModelB', 'ModelC']
]);
$mock->ModelA->expects($this->once())->method('someFunctionFromModel')->will($this->returnValue(true));
$mock->ModelB->ModelC->expects($this->once())->method('someFunction')->will($this->returnValue(true));
}
错误:调用非对象上的成员函数expects()-对于我尝试使用的每个模型…这是一篇旧文章,但我遇到了相同的问题 我是这样解决的:
public function testSome() {
// mock your controller
$mock = $this->generate(
'Example',
array(
models' => array('ModelA'),
)
);
// mock modelA and assign it to the mocked controller model
$mock->ModelA = $this->getMockForModel('ModelA', array('someFunction'));
$mock->ModelA
->expects($this->once())
->method('someFunction')
->will($this->returnValue('yeah'));
}
这只适用于直接相关的模型,而不是模拟已模拟模型的模型,我不确定这是一个好主意