sha*_*yyx 5 php phpunit code-coverage netbeans-7 netbeans-7.4
在我的NetBeans中,我已经使用PHPUnit建立了一个项目(ZF2应用程序)。一切都很好,但是当我尝试收集代码覆盖率时,它无法覆盖某些行,我不理解也无法解释。
代码是这样的:
switch($type) {
case 'date':
return date('Y-m-d', strtotime($value));
case 'numeric':
default:
return $value;
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
/* > */ }
}
Run Code Online (Sandbox Code Playgroud)
这里/* > */也没有涵盖所有包含的行,即使单元测试也在测试条件的任何可能组合。
仅仅由于这些未发现的行,我无法达到100%的代码覆盖率。
我在用
PHPUnit 3.7.22PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch注意:是,在其他奇怪的事情if,foreach或switch语句,不return任何价值,他们的右括号}是不匹配的覆盖也不是未覆盖(覆盖线以绿色突出显示,未覆盖的红色-这是简单的白色-见附表IMG),从而对代码覆盖率没有影响...
有什么方法可以使PHPUnit(NB中的代码覆盖率模块)或通过调整PHPUnit测试覆盖此类行?

下面的屏幕截图中未涵盖的内容}很清楚 - 由于 case 子句中的 return 语句,它从未到达。因此,该switch($type)块没有被完全覆盖,(我猜)导致白色背景。
只需重构 switch 子句,不在 case 块中返回值,而是分配一个返回值,该返回值在函数末尾返回。