PHP - 代码覆盖 - 无法覆盖某些行...(Netbeans)

时间:2013-11-22 09:40:18

标签: 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;
    }

在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
  • Netbeans 7.4(b.201310111528)

注意:奇怪的是,在其他ifforeachswitch语句中,return没有}任何值,它们的右括号{{1}} 不匹配覆盖或未覆盖(覆盖的行突出显示为绿色,未覆盖的红色 - 这些只是白色 - 请参阅附件img)因此对代码覆盖百分比没有影响......

有什么方法可以制作PHPUnit(NB中的代码覆盖模块)或调整PHPUnit测试覆盖这样的行?

Code coverage example from NetBeans

1 个答案:

答案 0 :(得分:3)

下方屏幕截图中未涵盖的}是明确的 - 由于case子句中的return语句,它永远不会到达。因此,switch($type)块未被完全覆盖(我猜)会导致白色背景。

只需重构switch子句,不返回case块中的值,而是指定一个返回值,该值在函数末尾返回。