试图决定哪一个更适合我的情况。根据phpunit文档(非常有限),白名单应该包含目录中的所有文件,但它似乎没有这样工作。是否有人有任何建议,或可以给我指一个很好的参考,而不是phpunit手册。我正在使用XML配置文件。提前谢谢!

<?xml version="1.0" encoding="utf-8"?>
<phpunit>
  <filter>
    <whitelist>
      <directory suffix=".php">/home/ddohr/git/project/</directory>
    <exclude>
      <directory suffix=".php">/home/ddohr/git/project/vendor/</directory>
      <directory suffix=".php">/home/ddohr/git/project/plugins/</directory>
      <directory suffix=".php">/home/ddohr/git/project/test/</directory>
    </exclude>
    </whitelist>
  </filter>
</phpunit>

最佳答案

更新:下面不再适用于phpunit 3.6及以上版本。有关新解决方案,请参见Add files to code-coverage white/blacklists in bootstrap.php for PHPUnit
原始答案
至于“白名单与黑名单”的问题,请注意它们是互斥的,白名单胜过黑名单。我们在项目中使用白名单,因为我们希望在没有测试的类上报告0%的覆盖率。我们的bootstrap.php模块将白名单设置为比当时将其放入phpunit.xml中更易于管理。
例如,库项目的bootstrap.php使用includeDirectoryForCodeCoverage()将其源添加到白名单:

includeDirectoryForCodeCoverage(MY_LIBRARY_PATH);

这是一个简单的帮助程序,用于抽象对php_codecoverage的实际调用:
function includeDirectoryForCodeCoverage($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addDirectoryToWhitelist($path);
}

function includeFileForCodeCoverage($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addFileToWhitelist($path);
}

function includeFilesForCodeCoverage(array $paths) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addFilesToWhitelist($paths);
}

不过,黑名单还是很方便的。phpunit将隐藏黑名单文件中任何代码的堆栈跟踪项。为此,我加了一个小宝石:
function ignoreDirectoryInStackTraces($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addDirectoryToBlacklist($path);
}

关于php - phpunit白名单vs黑名单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5871350/

10-12 01:10