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

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.22
  • PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch
  • Netbeans 7.4(出生于201310111528)

注意:是,在其他奇怪的事情ifforeachswitch语句,不return任何价值,他们的右括号}不匹配的覆盖也不是未覆盖(覆盖线以绿色突出显示,未覆盖的红色-这是简单的白色-见附表IMG),从而对代码覆盖率没有影响...

有什么方法可以使PHPUnit(NB中的代码覆盖率模块)或通过调整PHPUnit测试覆盖此类行?

NetBeans的代码覆盖范围示例

l-x*_*l-x 3

下面的屏幕截图中未涵盖的内容}很清楚 - 由于 case 子句中的 return 语句,它从未到达。因此,该switch($type)块没有被完全覆盖,(我猜)导致白色背景。

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