【问题标题】:Mock object in PHPUnit is not invoked未调用 PHPUnit 中的 Mock 对象
【发布时间】:2017-04-02 03:36:09
【问题描述】:

我的 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。

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

【问题讨论】:

  • 请分享所有测试代码和被测方法

标签: php zend-framework mocking phpunit zf3


【解决方案1】:

代码设置了一个期望,然后什么也不做。必须有一些东西在模拟对象上实际调用fetchSingleById。此外,从测试的名称来看,它看起来像是在模拟它应该测试的方法。无需在不属于 PHPUnit 本身的测试用例中测试 PHPUnit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2013-03-29
    • 2020-01-25
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多