PHPUnit白名单与黑名单

3

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

对我而言,它的工作方式是这样的:我现在正在使用的XML文件 - ircmaxell
@dave:那不是一个有效的选项文件。这可能就是为什么它失败的原因。使用我上面链接的文件作为示例,并根据需要进行调整... - ircmaxell
什么不合法?我添加了 PHPUnit 标签。我们不使用测试套件,而是通过目录来运行测试。谢谢! - Dave
(提示) https://github.com/gooh/phpunit-schema - Gordon
@Dave:在链接的项目中看一下我的测试用例吧。我也不使用测试套件(至少没有显式地使用)。但你需要使用那个标签和 include 属性来定义你的测试在哪里... - ircmaxell
显示剩余5条评论
1个回答

1

更新:以下内容不再适用于 PHPUnit 3.6 及以上版本。请参见在 PHPUnit 的 bootstrap.php 中添加代码覆盖白名单/黑名单获取新的解决方案。

原始答案

关于“白名单 vs 黑名单”的问题,请注意它们是互斥的,而白名单优先于黑名单。我们在项目中使用白名单,因为我们希望对没有测试的类报告 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);
}

在PHPUnit 3.6中,已删除PHP_CodeCoverage_Filter::getInstance(非基于XML的黑名单设置变得非常麻烦)。 - Tgr
请参考在PHPUnit的“bootstrap.php”中将文件添加到代码覆盖率白名单/黑名单中获取适用于3.6.x及以上版本的解决方案。 - David Harkness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接