PHP单元测试抽象类中的受保护变量

时间:2013-07-06 13:37:43

标签: php phpunit

以下是我正在尝试进行单元测试的代码:

public function getDao () {
    $dao = '';

    if (isset($this->_dao)) {
        $dao = $this->_dao;
    } else {
        $dao = new $this->_daoClassName; 
    }

    return $dao;
}

该类是一个抽象类,$_daoClassName是一个受保护的变量。每个具体类都为$_daoClassName

设置一个值

我如何对此代码进行单元测试?我正在尝试使用PHPUnit的$ this-> getMockForAbstractClass()但我不认为我可以覆盖受保护的方法。或者,我应该在这个getDao()方法上使用更好的模式吗?

1 个答案:

答案 0 :(得分:1)

我强烈建议使用以下功能:

abstract protected function getDaoClassName();

哪个应该由子类实现。 (通过abstract强制执行)

然后,您可以以函数返回特定值的方式配置模拟:

$stub = $this->getMockForAbstractClass('YourClass');
$stub->expects($this->any())
     ->method('getDaoClassName')
     ->will($this->returnValue('SomeDaoClass'));

然后测试方法:

$dao = $stub->getDao();
$this->assertEquals('SomeDaoClass', get_class($dao));