Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在测试代码时完全覆盖条件(例如PHP和xdebug)_Php_Phpunit_Code Coverage_Xdebug - Fatal编程技术网

如何在测试代码时完全覆盖条件(例如PHP和xdebug)

如何在测试代码时完全覆盖条件(例如PHP和xdebug),php,phpunit,code-coverage,xdebug,Php,Phpunit,Code Coverage,Xdebug,不久前,我开始在phpunitv中编写测试。9它很棒,令人惊叹,但是: 我怎样才能恰当地涵盖条件句 我将给出一些例子,其中的结果是正确的和预期的,以及我看到的问题。这是: 请注意,下面的代码只是示例 我知道,当我传递true-to-if语句时,将没有机会转到代码的其他分支。这只是一个尽可能简单的例子 不存在问题的情况: if (true) { return 'true';//here is covered } return 'false';//here is not covered

不久前,我开始在phpunitv中编写测试。9它很棒,令人惊叹,但是:

我怎样才能恰当地涵盖条件句

我将给出一些例子,其中的结果是正确的和预期的,以及我看到的问题。这是:

请注意,下面的代码只是示例

我知道,当我传递true-to-if语句时,将没有机会转到代码的其他分支。这只是一个尽可能简单的例子

不存在问题的情况:

if (true) {
    return 'true';//here is covered
}
return 'false';//here is not covered    
这是可以的,但是如下所示:

return (true) ? 'true' : 'false';
整行被视为已覆盖,但很明显,false将永远不会返回

所以。我做了什么坏事


唯一的解决办法是不使用三元运算符?它的语法非常简短,但由于缺少有关覆盖率的真实/错误信息,因此容易出错:

PHP单元中的默认视图实际上是行覆盖,因此,正如您所指出的,在单行三元情况下,无法区分两个分支

然而,最近PHPUnit也有

它在行的左侧输出中显示这一点。为了查看缺少哪些分支,您可以将鼠标悬停在源代码视图中的黄色线条上,它将告诉您,在我的示例中,4个可能的路径中只有3个被遵循


该特性的作者还写了一篇文章。

PHP单元中的默认视图实际上是行覆盖,因此,正如您所指出的,在单行三值情况下,无法区分两个分支

然而,最近PHPUnit也有

它在行的左侧输出中显示这一点。为了查看缺少哪些分支,您可以将鼠标悬停在源代码视图中的黄色线条上,它将告诉您,在我的示例中,4个可能的路径中只有3个被遵循

这篇专题文章的作者还写了一篇文章