我遇到了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的+:关闭
问候,
威尔
我以为PHPUnit(运行XDebug)告诉你哪些行被*执行*。我认为你的数组行走线不会被解释者看到,同样} else {。你的同事看到的涵盖了这些相同的确切线条? – 2012-04-02 04:43:14
...只是仔细阅读你的笔记。鲍勃得到了很好的报道,你获取,更改你的代码,现在覆盖面是不正确的?如果你提取干净并运行测试会发生什么?你为什么明显地相信这不是你改变的? – 2012-04-02 04:53:38
你们都运行相同的php/xdebug版本? – edorian 2012-04-02 08:00:02