这是我试图进行单元测试的代码:
public function getDao () {
$dao = '';
if (isset($this->_dao)) {
$dao = $this->_dao;
} else {
$dao = new $this->_daoClassName;
}
return $dao;
}
该类是一个抽象类,$_daoClassName
是一个受保护的变量。每个具体类为$_daoClassName
设置一个值
如何对该代码进行单元测试?我正在尝试使用PHPUnit的$this->getMockForAbstractClass(),但我认为我无法覆盖受保护的方法。或者,我应该在这个getDao()方法上使用更好的模式吗?
我强烈建议使用这样的函数:
abstract protected function getDaoClassName();
应该通过子类来实现。(通过abstract
强制执行)
然后,您可以以函数返回特定值的方式配置mock:
$stub = $this->getMockForAbstractClass('YourClass');
$stub->expects($this->any())
->method('getDaoClassName')
->will($this->returnValue('SomeDaoClass'));
然后测试方法:
$dao = $stub->getDao();
$this->assertEquals('SomeDaoClass', get_class($dao));