2012-04-02 121 views
1

我遇到了PHPUnit的一个奇怪问题。我正在与一组开发人员一起开发项目,所有这些开发人员都必须使用PHPUnit 3.6.5。在大多数情况下,我的PHPUnit工作得很好,并产生与其他开发人员的机器相同的结果。但是,我偶尔会发现某行不包含在我的机器上,但是在其他开发人员的机器上。以下是最近的场景:PHPUnit代码覆盖范围不包括某些行

  • Bob正在检查刚刚更新的新文件。他确保通过该文件的单元测试,并具有95%的代码覆盖率。执行此检查后,他会检查文件,它的构建位置和单元测试运行的位置。如果服务器上的单元测试失败,我们的版本会变红并且没有人可以检入。
  • 服务器运行phpunit测试并通过。
  • 其他开发商,包括我自己,得到的Perforce代码库
  • 最新做我自己的一套的变化后,我运行所有PHPUnit测试的应用程序,但我注意到其中一个文件没有足够的代码覆盖率。这是Bob刚刚签入的文件。我与我的团队中的其他开发人员进行了核对,该文件通过了代码覆盖,对他们没有任何问题。当我检查代码覆盖率报告,我看到以下内容:

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

$变量1,
功能($ VAL,$键)使用(& $ variableData,& $变量2)

这两行不包括在内!我不明白为什么我的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的调试器:熄灭 的XDebug:开机状态下 Zend Optimizer的+:关闭

问候,

威尔

+0

我以为PHPUnit(运行XDebug)告诉你哪些行被*执行*。我认为你的数组行走线不会被解释者看到,同样} else {。你的同事看到的涵盖了这些相同的确切线条? – 2012-04-02 04:43:14

+0

...只是仔细阅读你的笔记。鲍勃得到了很好的报道,你获取,更改你的代码,现在覆盖面是不正确的?如果你提取干净并运行测试会发生什么?你为什么明显地相信这不是你改变的? – 2012-04-02 04:53:38

+0

你们都运行相同的php/xdebug版本? – edorian 2012-04-02 08:00:02

回答

1

可执行文件并执行行由xdebug报告给PHPUnit。不同版本的xdebug在报告的行中可能会有所不同。

如果你觉得他们不正确,请提供一个简单的测试用例并在xdebug's issue tracker处打开一个错误。