6

在我的 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)

注意:奇怪的是,在其他没有任何价值的或语句中ifforeach它们的右括号不匹配为已覆盖或未覆盖(覆盖线突出显示为绿色,未覆盖的红色 - 这些只是白色 - 见附件 img)因此对代码覆盖率没有影响...switchreturn}

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

NetBeans 的代码覆盖率示例

4

1 回答 1

3

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

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

于 2013-11-22T09:52:50.290 回答