以下是我正在尝试进行单元测试的代码:
public function getDao () {
$dao = '';
if (isset($this->_dao)) {
$dao = $this->_dao;
} else {
$dao = new $this->_daoClassName;
}
return $dao;
}
该类是一个抽象类,$_daoClassName
是一个受保护的变量。每个具体类都为$_daoClassName
我如何对此代码进行单元测试?我正在尝试使用PHPUnit的$ this-> getMockForAbstractClass()但我不认为我可以覆盖受保护的方法。或者,我应该在这个getDao()方法上使用更好的模式吗?
答案 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));