在xdebug代码覆盖中,它显示“return false;”行(在我的测试中未涵盖“!$ r”以下)。但是,$ sql基本上是硬编码的。我该如何获得报道?我会以某种方式覆盖“$ table”吗?或者为这部分测试终止数据库服务器?
我想这可能告诉我,我不是很好地写我的模型,对吧?因为我不能很好地测试它。我怎么能写得更好?
由于未涵盖这一行,因此不涵盖整个方法,并且报告已关闭。
我是phpunit的新手。感谢。
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;
}
答案 0 :(得分:1)
理论上,您应该更好地分离模型和所有与数据库相关的代码。
例如,在Zend Framework中,快速入门指南建议您:
这是一个非常有趣的模型,您应该看看它,它使您能够真正地将模型与数据分开,从而仅对模型部分执行测试(并且不关心任何数据库问题) /问题)
但是在你的代码中,我建议你执行一个测试,你有dbq()函数返回false(可能有意无意地“使用db连接”),以便拥有完整的代码覆盖。强>
我经常遇到这种情况,测试所有“错误案例”会花费你太多时间,所以我放弃了100%的代码覆盖率。
答案 1 :(得分:0)
我猜函数dbq()
执行数据库查询。只需拔下数据库连接并重新运行测试即可。
您测试失败的原因是您正在使用全局资源:您的数据库连接。通常,您可以通过将连接对象提供给测试方法(或类)来避免此问题。