phpunit Whitelist vs Blacklist

时间:2011-05-03 14:50:25

标签: php phpunit lamp

尝试决定哪一种更适合我的情况。根据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>

1 个答案:

答案 0 :(得分:1)

更新:以下内容不再适用于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); 将其来源添加到白名单中:

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);
}

这是一个简单的帮助器,用于抽象实际调用PHP_CodeCoverage:

function ignoreDirectoryInStackTraces($path) {
    PHP_CodeCoverage_Filter::getInstance()
            ->addDirectoryToBlacklist($path);
}

然而,黑名单仍然很方便。 PHPUnit将隐藏列入黑名单的文件中的任何代码的堆栈跟踪条目。出于这个原因,我添加了这个小宝石:

{{1}}