phpunit的代码覆盖率;can';我到不了一个地方
在xdebug代码覆盖范围中,它显示了“return false;”(在“!$r”下面)这一行,这是我的测试没有覆盖的。但是,$sql基本上是硬编码的。我怎样才能得到这方面的保险?我是否以某种方式覆盖“$table”?或者为这部分测试杀死数据库服务器 我猜这可能是在告诉我我的模型写得不好,对吧?因为我不能很好地测试它。我怎样才能写得更好 因为这一行没有被覆盖,所以整个方法没有被覆盖,报告也被关闭 我对phpunit还不太熟悉。谢谢phpunit的代码覆盖率;can';我到不了一个地方,php,phpunit,xdebug,Php,Phpunit,Xdebug,在xdebug代码覆盖范围中,它显示了“return false;”(在“!$r”下面)这一行,这是我的测试没有覆盖的。但是,$sql基本上是硬编码的。我怎样才能得到这方面的保险?我是否以某种方式覆盖“$table”?或者为这部分测试杀死数据库服务器 我猜这可能是在告诉我我的模型写得不好,对吧?因为我不能很好地测试它。我怎样才能写得更好 因为这一行没有被覆盖,所以整个方法没有被覆盖,报告也被关闭 我对phpunit还不太熟悉。谢谢 我猜函数dbq()执行数据库查询。只需拔下数据库连接并重新运行
我猜函数
dbq()
执行数据库查询。只需拔下数据库连接并重新运行测试
测试时遇到问题的原因是您正在使用全局资源:数据库连接。通常,您可以通过向测试方法(或类)提供连接对象来避免此问题。理论上,您应该更好地分离模型和所有与数据库相关的代码 例如,在Zend Framework中,《快速入门指南》建议您:
- 你的模型课
- 您的数据映射器,其角色是将模型“转换”为数据库模型
- 直接访问表的DAO(或表数据网关)
public function retrieve_all()
{
$table = $this->tablename();
$sql = "SELECT t.* FROM `{$table}` as t";
$r = dbq ( $sql, 'read' );
if(!$r)
{
return false;
}
$ret = array ();
while ( $rs = mysql_fetch_array ( $r, MYSQL_ASSOC ) )
{
$ret[] = $rs;
}
return $ret;
}