为什么PHPUnit显示一些紧密的花括号没有被覆盖?

为什么PHPUnit显示一些紧密的花括号没有被覆盖?,php,phpunit,code-coverage,xdebug,Php,Phpunit,Code Coverage,Xdebug,我正在使用phpunit3.6.7、phpucodecoverage 1.1.1和Xdebug 2.1.2。当我无法将代码覆盖率统计数据写入clover样式的XML文件时,它偶尔会显示一个大括号,表示测试没有覆盖 我在网上看到很多关于PHPUnit何时“到达”近曲括号的讨论,但我不理解发生了什么的一般概念。例如,我这里一行的覆盖率为零: if (is_array($foo)) { foreach ($foo as $bar) { if (property_exists($

我正在使用phpunit3.6.7、phpucodecoverage 1.1.1和Xdebug 2.1.2。当我无法将代码覆盖率统计数据写入clover样式的XML文件时,它偶尔会显示一个大括号,表示测试没有覆盖

我在网上看到很多关于PHPUnit何时“到达”近曲括号的讨论,但我不理解发生了什么的一般概念。例如,我这里一行的覆盖率为零:

if (is_array($foo)) {
    foreach ($foo as $bar) {
        if (property_exists($bar, 'baz')) {
            return $bar;
        }
    }
}  // this line has 0 coverage
return null;
在这里:

class Foo
{
    public $myProperty;
    public function myMethod()
    {
        $this->myProperty = '1';
    }
}  // this line has 0 coverage
我项目中的其他类没有这个问题;它们的右大括号根本不会显示在XML文件中,因此它们不会被列为覆盖率为零

我知道PHP_CodeCoverage 1.1.2(尚未发布)会让我在一个大括号后加上“/@codeCoverageIgnore”注释,但在这之前,我想知道发生了什么,这样我就可以修复我的测试,以提供完整的覆盖。根据经验法则,什么时候一个卷曲的大括号应该算作“覆盖”或“未覆盖”

根据经验法则,什么时候一个卷曲的大括号应该算作“覆盖”或“未覆盖”

有一个问题,但显然并不像我在过去几天里学到的那样完整:)

我个人从未见过的是你失败的第二个例子。我也无法复制它:我找不到一个PHP/xDebug/PHPUnit组合,在那里它不起作用。(复制如下)

你展示的另一个案例也是如此。尽管如此,我还是可以测试两个右大括号,它们被检测为“不可执行/可访问”,就像人们所期望的那样

因此,对于这两种情况,都不需要//@codeCoverageIgnore或//@codeCoverageIgnore[Start | End]

正如@Derick在评论中所建议的那样,需要对整个文件进行进一步分析


复制
它只标记
$this->myProperty='1'它作为可执行文件关闭大括号。

它的覆盖率是0,还是说没有可覆盖的代码?对于第一种情况,您是否有一个测试用例覆盖$foo作为数组,但数组中没有一个条目符合条件?Derick-行的覆盖率为0;XML表示。Louis Philippe:在第一个示例中,我没有您所描述的测试用例,但是为什么一个单独的闭合大括号应该被视为具有任何覆盖范围呢?Brian,如果您提供整个PHP文件,我可以(或者您可以)查看PHP使用VLD(/)看到的代码@BrianKendig-这不是关闭支架本身可以运行,而是区块通过掉落退出。使用
返回
继续
中断
抛出
,等等,改变常规的执行流程。在第一种情况下,Xdebug检测到您没有一个测试用例,其中
for
循环贯穿每个元素。看,伊多莉安,非常感谢你;这有助于我深入研究这个问题。我发现,当我像您一样测试一个文件并添加“-coverage clover foo.xml”时,我得到了正确的结果;但是,当我随后添加“-configuration=MyConfig.xml”将其指向我的配置文件时,foo.xml文件将文件的最后一行显示为覆盖率为0的语句。即使我添加了一组回车,将文件填充到100行,它也会将第100行显示为覆盖率为0的语句。我正在研究它,看看我的配置文件是否有什么奇怪的地方(里面没有太多)。@BrianKendig如果你不介意的话,把配置编辑成问题:)@edorian我过去也有过同样的问题。结果是我的行尾不好(就像我用Windows而不是Unix编码一样)。然而,现在我又遇到了同样的问题,无法在一行900上诊断原因。自从上次回答这个问题以来,有没有新的输入?我刚刚注意到另一条关于卷发后返回的错误评论。。。但它应该是固定的,我在2.2.2上,所以我更困惑了
<?php

class Foo
{
    public $myProperty;
    public function myMethod()
    {
        $this->myProperty = '1';
    }
}

<?php

require __DIR__ . '/closingBrace.php';

class FooTest extends PHPUnit_Framework_TestCase {

    public function testMyMethod() {
        $x = new Foo();
        $x->myMethod();
    }

}
Code Coverage Report 
  2012-01-12 10:17:32

 Summary: 
  Classes: 100.00% (1/1)
  Methods: 100.00% (1/1)
  Lines:   100.00% (2/2)