1

这是我要进行单元测试的代码:

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

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

    return $dao;
}

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

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

4

1 回答 1

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));
于 2013-07-06T13:41:10.727 回答