【问题标题】:Setting up whitelists in PHPUnit在 PHPUnit 中设置白名单
【发布时间】:2011-09-19 10:02:18
【问题描述】:

我在为 PHP 设置白名单时遇到了以下问题:

我在 phpunit xml 中设置了以下过滤器:

<filter>
    <whitelist>
        <directory suffix=".php">../..</directory>
        <exclude>
            <directory>../../cache</directory>
            <directory>../../public_html</directory>
            <directory>../../temp</directory>
            <directory>../../tools</directory>
        </exclude>
    </whitelist>
</filter>

没有该白名单,一切正常,但是当我输入它时,系统崩溃了,因为它试图包含所有文件。这使得它包含一个具有 require_once 的文件,因此它会使应用程序崩溃。

EDIT 系统在启动时定义了一些常量。由于在包含创建白名单的所有数据时未定义这些常量,因此它会尝试访问一个不存在的文件夹(PHP 假定该常量是一个字符串),因此 require_once 失败,并且鉴于它是一个要求,它崩溃了。

此外,如果有任何帮助,白名单将被用于与 Selenium 一起使用。也许这就是问题的根源?

【问题讨论】:

  • 它也像 edorian 在我们的代码中写的那样工作。也许您的代码是在做一个简单的require。编辑您的问题以添加实际的错误输出,因为“使应用程序崩溃”不是很有描述性。
  • 也许您可以在 PHPUnit 引导程序或基本测试用例中定义该常量?
  • 这不会违背良好的做法吗?无论如何,我会尝试一下,看看它是否至少有效。

标签: php phpunit whitelist


【解决方案1】:

为了收集代码覆盖率信息,系统有点必须要求所有文件,这是预期的行为。 (从技术上讲,它没有必须,但确实如此)

如果您使用的是require_once,这应该不是问题,因为 phpunit 也使用 "_once" 来要求文件。

我们在充满 require_once 语句的代码库上使用白名单,我遇到的唯一问题是在两个地方定义了一个类。

【讨论】:

  • 这里的主要问题是代码依赖于一个框架,因此,当单独加载时,它会崩溃(我对框架的代码覆盖率不感兴趣)。
  • @Lumbendil 通常在&lt;phpunit bootstrap="yourBootstrap.php"&gt; 中引导框架,但它不包含在白名单中(或&lt;excluded&gt; 那里)。您的问题是您的代码需要框架的某些部分而这行不通?
  • atm 我只是在构建 Selenium 测试,这就是引导程序当前不引导框架的原因。我们没有计划从单元测试 atm 开始,我是否应该引导它来完成这项工作?
  • 所以你正在做 selenium 并像phpunit.de/manual/current/en/… 中描述的那样收集覆盖信息(以Copy PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php into your webserver's document root directory. 开头)。我会说如果你想让白名单工作只是引导框架但是当谈到 Selenium 我不确定最好的方法
  • 好吧,那我就简单地引导框架,怀疑有没有更好的选择。
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2012-01-14
  • 2017-09-28
  • 2012-10-22
  • 2022-06-26
  • 2015-06-22
  • 2020-04-14
相关资源
最近更新 更多