模拟对非对象的成员函数返回模拟调用

时间:2013-12-02 01:24:38

标签: unit-testing mocking phpunit

我想测试这段代码

public function saveRecord( $recordID )
{
    if (empty($recordID)) {
        return $this;
    }
    $this->model('Company')->save($this->getData());
    return $this;
}

我已经为$ recordID不为空的情况设置了测试:

public function testSaveRecord2()
{
    $dataToSave = array(
        'name' => 'value1',
        'project_stages' => 'value2'
    );

    $model = $this->getMockBuilder('Company')
        ->disableOriginalConstructor()
        ->setMethods(array('save') )
        ->getMock();
    $model->expects($this->once())
        ->method('save')
        ->with($dataToSave);

    $subject = $this->getMockBuilder('Form_Company_Settings')
        ->disableOriginalConstructor()
        ->setMethods(array('getData', 'model') )
        ->getMock();
    $subject->expects($this->once())->method('getData')->will($this->returnValue($dataToSave));
    $subject->expects($this->once())->method('model')->will($this->returnValue($model));

    $subject->saveRecord(1);
}

我得到的错误是“致命错误:在非对象上调用成员函数save()”,即。当从“模型”函数返回$ model时,它似乎没有保存函数。

我也尝试过:

public function testSaveRecord2()
{
    $dataToSave = array(
        'name' => 'value1',
        'project_stages' => 'value2'
    );
    $model = $this->getMockBuilder('Company')
        ->disableOriginalConstructor()
        ->setMethods(array('save') )
        ->getMock();
    $model->expects($this->once())
        ->method('save')
        ->with($dataToSave);

    $subject = $this->getMockBuilder('Form_Company_Settings')
        ->disableOriginalConstructor()
        ->setMethods(array('getData') )
        ->getMock();
    $subject->expects($this->once())->method('getData')->will($this->returnValue($dataToSave));

    $subject->saveRecord(1);
}

希望我不需要模拟模型,只需让它将公司对象返回给我。在这种情况下,我得到 “方法名称的期望失败等于1次调用时。 预计方法被调用1次,实际上被称为0次“

我看不出为什么不在这里调用保存?

1 个答案:

答案 0 :(得分:1)

在模拟静态函数调用时,您需要使用 staticExpects 而不是期望