PHPUnit代码覆盖" require_once"语句

时间:2016-10-13 07:03:26

标签: php phpunit code-coverage xdebug

我可以排除" require_once"代码覆盖的陈述?带" require_once"的行报告为未涵盖但如果脚本中的其他行被覆盖则不可能:

enter image description here

PHP 7.0.11,PHPUnit 5.5.7& XDebug 2.4.0用于代码覆盖。

2 个答案:

答案 0 :(得分:3)

PHPUnit documentation中,提到使用@codeCoverageIgnoreStart / @codeCoverageIgnoreEnd / @codeCoverageIgnore条评论从代码区排除代码区。

所以你可以尝试类似的东西:

// @codeCoverageIgnoreStart
require_once __DIR__ . '/Data/TData.php';
require_once __DIR__ . '/Data/Path.php';
// @codeCoverageIgnoreEnd

require_once __DIR__ . '/Data/TData.php'; // @codeCoverageIgnore
require_once __DIR__ . '/Data/Path.php'; // @codeCoverageIgnore

答案 1 :(得分:1)

您已启用forceCoversAnnotation

  

forceCoversAnnotation

     

仅对使用the section called "@covers"中记录的@covers注释的测试记录代码覆盖率。

     

- Appendix C. The XML Configuration File

停用forceCoversAnnotation会产生require_once来电的覆盖范围。

例如,您可以在forceCoversAnnotation配置文件中禁用phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit forceCoversAnnotation="false">
...

如果您想使用@covers注释,则需要停用checkForUnintentionallyCoveredCode或在require_once注释中包含@codeCoverageIgnore*次来电。

无论

<?xml version="1.0" encoding="UTF-8"?>
<phpunit forceCoversAnnotation="true"
         checkForUnintentionallyCoveredCode="false">
...

或者

// @codeCoverageIgnoreStart
require_once __DIR__ . '/Data/TData.php';
require_once __DIR__ . '/Data/Path.php';
// @codeCoverageIgnoreEnd

原因是,使用forceCoversAnnotation意味着您要指定明确涵盖的所有内容。您可以使用@covers注释来完成此操作。 @uses注释允许您指定测试有意覆盖的代码。但@uses无法用于指定导致副作用的代码,例如require_once陈述。这是@codeCoverageIgnoreStart@codeCoverageIgnoreEnd的来源,它允许您明确指定coverage应忽略的代码。

这些注释大部分都是关于代码覆盖的严格性。