2016-11-18 117 views
1

我在我的PHPUnit测试中有此代码,它试图模拟一个表实体。但是当我尝试运行它时,我得到这个错误。PHPUnit中的模拟对象未被调用

当调用1次时,方法名称的期望失败等于 。方法预计 被称为1次,实际上被称为0次。

public function testFetchSingleById() 
{ 
    $mockJobTable = $this->getMockBuilder('Job\Table\JobTable') 
     ->disableOriginalConstructor() 
     ->setMethods(['fetchSingleById']) 
     ->getMock(); 

    $firstDateRun = new \DateTime('2016-06-03'); 
    $firstDateRun = $firstDateRun->format('Y-m-d H:i:s'); 

    $job = new JobEntity(); 
    $job->exchangeArray([ 
     'id' => 1, 
     'name' => 'parse', 
     'params' => '--dry-run', 
     'setFirstDateRun' => $firstDateRun, 
     'period' => '* * * * *' 
    ]); 

    $mockJobTable->expects($this->once()) 
       ->method('fetchSingleById') 
       ->with(1) 
       ->will($this->returnValue($job)); 
} 

的方法,我正在测试:

class JobTable extends TableGateway implements JobTableInterface 
{ 
    public function __construct(Adapter $adapter, JobEntity $entity) 
    { 
     $resultSet = new ResultSet(); 
     $resultSet->setArrayObjectPrototype($entity); 
     parent::__construct('job', $adapter, null, $resultSet); 
    } 

    public function fetchSingleById($id) 
    { 
     $select = $this->getSql()->select(); 
     $select->where->equalTo('id', $id); 
     return $this->selectWith($select)->current(); 
    } 
} 

我使用ZF3。

我错过了一些东西,但我不知道是什么。

+0

请分享所有的测试代码和测试方法 – Matteo

回答

1

该代码设置了期望值,然后不做任何处理。必须有一些实际上在模拟对象上调用fetchSingleById。另外,从测试的名称看,它似乎在嘲笑它应该测试的方法。在一个不属于PHPUnit本身的测试用例中,不需要测试PHPUnit。