PHPUnit代码覆盖率不包括某些行

时间:2012-04-02 04:22:53

标签: php phpunit code-coverage

我对PHPUnit有一个奇怪的问题。我正在与一个开发团队合作开发一个项目,所有开发人员都必须使用PHPUnit 3.6.5。在大多数情况下,我的PHPUnit运行良好,并产生与其他开发人员的机器相同的结果。但是,我偶尔会发现某台线路没有覆盖在我的机器上,而是在其他开发人员的机器上。这是最近的一个场景:

  • Bob正在检查他刚更新的新文件。他确保单元测试通过此文件并具有95%的代码覆盖率。执行此检查后,他会检入文件,构建文件并运行单元测试。如果服务器上的单元测试失败,我们的构建将变为红色,没有人可以登记。
  • 服务器运行phpunit测试并通过。
  • 其他开发人员,包括我自己,从perforce存储库中获取最新信息
  • 在进行了我自己的一组更改后,我运行了应用程序的所有phpunit测试,但我注意到其中一个文件没有足够的代码覆盖率。这是Bob刚刚签入的文件。我与团队中的其他一些开发人员核对,文件传递代码覆盖率,没有任何问题。当我检查代码覆盖率报告时,我看到以下内容:

    array_walk(                                                                                            
        $variable1,                                                                                        
        function($val,$key) use(&$variableData, &$variable2)                                            
        {                                                                                                  
            $variableData[$variable2][$key] = 1;                                                               
        }                                                                                                  
    );
    

$变量1,
函数($ val,$ key)使用(& $ variableData,& $ variable2)

这两行不包括在内!我不明白为什么我的phpunit不想覆盖这些行。必须有一个我不知道的设置导致这个,因为我有与其他开发人员相同版本的PHPUnit,并且它在他们的机器上正常传递但在我的机器上没有。我也在这样的声明中看到同样的问题:

    if ($var === 1) {
        echo 'yes';
    } else {
        echo 'nope';
    }

现在,单元测试将涵盖这两个条件,但是,它不包括以下行:

}其他{

这有什么意义吗?关于它的最奇怪的部分是它在大多数时间都有效,但是有一些位置具有这种行为,尽管没有模式来指示它导致它的原因。我有其他开发人员在我的机器上查看这个问题,他们感到困惑,无法解释是什么导致它。问题是,因为它在本地失败,即使我没有触及Bob的文件,它也阻止我检查我的更改。有没有人遇到过这个问题?我将尝试卸载php单元并重新安装它,但除此之外,我不知所措。任何帮助将不胜感激!这是我的规格:

PHPUnit:版本3.6.5 操作系统:OS X 10.6.8 PHP:PHP 5.3.8-ZS5.5.0(cli)(内置:2011年8月24日11:03:29) Zend Debugger:关闭了 XDebug:开启了 Zend Optimizer +:关闭

此致

威尔

1 个答案:

答案 0 :(得分:1)

xdebug向PHPUnit报告可执行行和执行行。不同版本的xdebug可能会在报告为覆盖的行中有所不同。

如果您认为它们不正确,请提供一个简单的测试用例并在xdebug's issue tracker打开错误。