我已设置phpunit.xml
执行以下操作:
<filter>
<whitelist addUncoveredFilesFromWhitelist="true" processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">/my/app</directory>
</whielist>
</filter>
我运行测试:
phpunit -c /path/to/phpunit.xml --coverage-text
但是,我希望永远不要在一个文件中对覆盖率进行评估,因为它会在我的文本测试覆盖率报告中输出一堆垃圾。假设类/方法被命名my\app\Response::render()
此方法的简化版本是:
public function render($response) {
header($response['status']);
echo $response['body'];
echo "\n";
}
此render()
方法发出一个header()
命令以及许多echo()
命令,这些命令在运行覆盖率报告时会引发大量文本和错误--coverage-text
。
我尝试了以下方法:
- 添加了注释
@codeCoverageIgnore
- 到我在 xml 中的白名单块,试图排除整个文件:
<exclude><file>/my/app/Response.php</file></exclude>
既不阻止该方法被执行(以某种方式)。
我考虑过像在这个方法中添加一些代码来检查我们是否正在通过 phpunit 执行的黑客攻击,比如将代码包装在:
if(strpos($GLOBALS['argv'][0], 'phpunit') !==false){
// ... do stuff
}
或者,就像使用一个好的旧$do_debug
变量方法一样,phpunit
在 phpunit.xml 中指定的 via 中传递一个环境变量以禁用此代码(这样,如果以后我想运行 phpunit 并让该方法执行,我只需切换环境变量即可)。
这些选项似乎都不优雅。我不喜欢修改我的代码来解决测试问题(我什至有点不高兴在我的方法中添加测试提示注释,我宁愿用某种白/黑名单来处理它)。
但是,当在经过严格审查的一组库中出现一些需要不太优雅的解决方案的感知限制时,我喜欢对照社区检查我的头,看看是否有什么被忽略了。
任何人都知道我如何才能防止这种方法在 Phpunit 的功能范围内被处理?