我可以排除" require_once"代码覆盖的陈述?带" require_once"的行报告为未涵盖但如果脚本中的其他行被覆盖则不可能:
PHP 7.0.11,PHPUnit 5.5.7& XDebug 2.4.0用于代码覆盖。
答案 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
仅对使用the section called "
@covers
"中记录的@covers
注释的测试记录代码覆盖率。
停用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应忽略的代码。
这些注释大部分都是关于代码覆盖的严格性。