在我的NetBeans中,我使用PHPUnit设置了一个项目(ZF2应用程序)。一切都很好,除非我试图收集代码覆盖率,它不能涵盖某些我不理解也无法解释的行。
代码是这样的:
switch($type) {
case 'date':
return date('Y-m-d', strtotime($value));
case 'numeric':
default:
return $value;
}
在UnitTest测试两种情况之后,不包括switch语句的结束括号。
其他例子:
foreach ($this->userRoleNames as $role) {
if (self::$acl->hasResource($moduleName)) {
if (self::$acl->isAllowed($role, $moduleName)) {
return true;
}
/* > */ }
if (self::$acl->hasResource($privilageName)) {
if (self::$acl->isAllowed($role, $privilageName)) {
return true;
}
/* > */ }
if (self::$acl->hasResource($privilageNameFull)) {
if (self::$acl->isAllowed($role, $privilageNameFull)) {
return true;
}
/* > */ }
}
此处包含/* > */
的所有行也未被涵盖,即使单元测试正在测试任何可能的条件组合。
由于这些未覆盖的行,我无法达到100%的代码覆盖率。
我正在使用
PHPUnit 3.7.22
PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch
注意:奇怪的是,在其他if
,foreach
或switch
语句中,return
没有}
任何值,它们的右括号{{1}} 不匹配覆盖或未覆盖(覆盖的行突出显示为绿色,未覆盖的红色 - 这些只是白色 - 请参阅附件img)因此对代码覆盖百分比没有影响......
有什么方法可以制作PHPUnit(NB中的代码覆盖模块)或调整PHPUnit测试覆盖这样的行?
答案 0 :(得分:3)
下方屏幕截图中未涵盖的}
是明确的 - 由于case子句中的return语句,它永远不会到达。因此,switch($type)
块未被完全覆盖(我猜)会导致白色背景。
只需重构switch子句,不返回case块中的值,而是指定一个返回值,该值在函数末尾返回。