php - 如何在 PHPUnit 中实现 If/Else 的代码覆盖率?

标签 php zend-framework phpunit code-coverage

免责声明:我是单元测试的新手,刚刚入门。话虽这么说,我知道 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);
}

结果

enter image description here

如您所见,我无法覆盖 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; 

}

最佳答案

创建一个结果不会返回任何行的数据库上下文,然后在第二个测试方法中在该数据库上下文中创建一行。

针对实际应用程序的数据库进行测试通常不是一个好主意

您应该克隆它进行测试,以便可以操作数据来测试应用程序如何响应不同的数据上下文。

--编辑----

遵循本指南可能会有所帮助:http://framework.zend.com/manual/ru/zend.test.phpunit.db.html

关于php - 如何在 PHPUnit 中实现 If/Else 的代码覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355597/

相关文章:

testing - PhpUnit 和 PhpRack 有什么区别?

php - URL 的 Jquery/Javascript 检索不起作用

phpMyAdmin - 错误 : The mysqli extension is missing

php - 我可以将 base64 图像添加到 $_FILES 数组吗?

mysql - zend 'telephone.number' Zend_Paginator_Adapter_DbTableSelect 中的未知列 'where clause'

sql - Zend_Db_Table_Abstract 和 MySQL 注释

php - Zend Framework - 重定向到不同模块中的 IndexController

php - 如何测试 ZF2 服务

phpunit在phpstorm中运行问题,无法创建phar

javascript - 如何使用 wp_localize_script 更改 JavaScript 项目数组