【问题标题】:PHP - Code coverage - cannot get some lines covered... (Netbeans)PHP - 代码覆盖率 - 无法覆盖某些行......(Netbeans)
【发布时间】:2013-12-07 03:18:18
【问题描述】:

在我的 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 任何值,它们的右括号} 不匹配未覆盖(覆盖的行以绿色突出显示,未覆盖的行以红色突出显示 - 这些只是白色 - 见附件 img)因此对代码覆盖率没有影响...

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

【问题讨论】:

    标签: php phpunit code-coverage netbeans-7 netbeans-7.4


    【解决方案1】:

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

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

    【讨论】:

    • 将开关更改为不返回值,而是分配它们,然后返回 - 没有变化,仍然没有覆盖开关右括号。但是,在我删除 default: 子句之后,现在代码被 100% 覆盖,即使开关和右括号是白色的(跳过)。无论如何,这并不能解决我的问题中定义的if 语句的问题...
    • 如果你说的是真的,那么任何结束方法括号都不能被覆盖,因为你有return ...;在那里......听起来很奇怪......
    • 覆盖分析不是由 php 本身完成的,而是由例如 xdebug 完成的。这个工具很棒,但并不完美。所以这可能只是 xdebug 中的一个错误。当我在终端上看到它们的输出时,我对整个方法被声明为死代码的情况感到震惊。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多