【发布时间】:2012-03-10 11:12:33
【问题描述】:
免责声明:我是单元测试的新手,刚刚开始涉足。话虽如此,我知道 100% 并不总是可能的,但我很好奇是否有解决方案来使用 if/else 语句来解决代码覆盖率问题,或者它们是否只是不可测试。 p>
功能:
public function getAll()
{
// Query table for all rows sorted by name
$select = $this->select();
$select->order('name ASC');
$rowset = $this->fetchAll($select);
// Validate and return row
if($rowset->current())
{
// Return rowset
return $rowset;
}
else { return false; }
}
单元测试
public function testCanGetAll()
{
// Try to get all states
$result = $this->model->getAll();
$this->assertNotNull($result);
$this->assertNotEquals(false,$result);
}
结果
如您所见,我无法覆盖return false; 行。我能想到的测试它的唯一方法是重命名我的数据库表或类似的东西。
是否有另一种使用 if/else 语句编写函数的方法(这是一种相当普遍的做法),可以更轻松地覆盖代码?
[编辑] 也许最好不要在函数中检查结果,而只返回它?无论调用什么这个函数都必须自己检查?
public function getAll()
{
// Query table for all rows sorted by name
$select = $this->select();
$select->order('name ASC');
$rowset = $this->fetchAll($select);
// Return rowset whether valid or not
return $rowset;
}
【问题讨论】:
标签: php zend-framework phpunit code-coverage