【问题标题】:Symfony3 phpunit xmlSymfony3 phpunit xml
【发布时间】:2016-10-05 21:39:42
【问题描述】:

嘿,我在 Symfony3 项目中安装了 PhpUnit,当我在终端 bin/phpunit -c app 中运行时,我收到此错误:

Could not load XML from empty string

谷歌了一下,结果我需要在我的 app/ 目录中应用一个 phpunit.xml 文件,所以我做了,它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "autoload.php" >

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*/*Bundle/Tests</directory>
            <!--directory>../src/*/Bundle/*Bundle/Tests</directory-->
        </testsuite>
    </testsuites>

    <!--
    <php>
        <server name="KERNEL_DIR" value="/path/to/your/app/" />
    </php>
    -->

    <filter>
        <whitelist>
            <directory>../src</directory>
            <exclude>
                <directory>../src/*/*Bundle/Resources</directory>
                <directory>../src/*/*Bundle/Tests</directory>
                <!--directory>../src/*/Bundle/*Bundle/Resources</directory>
                <directory>../src/*/Bundle/*Bundle/Tests</directory-->
            </exclude>
        </whitelist>
    </filter>

</phpunit>

所以现在它工作正常,但我找不到开放答案的问题是:

  1. 为什么 php 单元需要这个文件 我可以看到文件显示了 phpunit 在哪里寻找测试,但这就是全部吗?

  2. 我手动创建了这个文件,有没有办法像使用终端命令一样自动创建它。

  3. 据我所知&lt;whitelist&gt; 是允许 phpunit '查看'的地方吗?和&lt;exlude&gt; phpunit 不允许“查看”的地方?如果是这样,那么为什么这个&lt;directory&gt;../src/*/*Bundle/Tests&lt;/directory&gt; 会在&lt;exlude&gt; 中,如果测试在哪里。

【问题讨论】:

    标签: php phpunit symfony


    【解决方案1】:

    使用新的 symfony3 目录结构,PHPUnit 配置文件位于项目的根目录中,因此您无需再指定 -c 参数(配置)。所以你可以简单地启动如下:

    >bin/phpunit
    

    希望有帮助

    【讨论】:

      【解决方案2】:

      先回答你的问题:

      1. 这是一个配置文件。它允许您自定义 PHPUnits 行为。有关该文件的完整说明,请查看 the docs
      2. Symfony 的默认安装在根目录 (See the repository) 中包含一个 phpunit.xml.dist 文件。 .dist 在这种情况下意味着它是 Symfony 建议的标准,您可以根据需要更改它。您可能对 parameters.yml.dist 文件做了同样的事情。只需将其复制并命名为phpunit.xml 并根据您当前的环境调整任何参数。确保您没有将 phpunit.xml 文件签入您的 VCS,因此特定于环境的更改不会干扰您在其上运行代码的其他系统。
      3. &lt;whitelist&gt;&lt;exclude&gt; 元素定义了应该是considered by PHPUnit or ignored 的文件。由于您在 &lt;filter&gt; 元素中添加了此块,因此它定义了 PHPUnit 应为其生成代码覆盖率的所有文件。您将测试文件排除在外,因为您希望它们能够运行并且只对实际代码在测试条件下的行为方式感兴趣。

      至于为什么您的测试无法运行,我不确定。尝试我在第 2 点中描述的方式并在您的项目目录中运行phpunit。对我来说,它开箱即用。

      【讨论】:

      • 感谢您提供非常有用的信息。它现在可以工作,但我需要将 phpunit.xml.dist 从 ./ 根目录移动并重命名为 app 目录,知道为什么吗? phpunit.xml 也应该只提交给 VCS phpunit.xml.dist 并且当项目被克隆时,composer update 将安装基于 n phpunit.xml.dist 的 phpunit.xml?
      • 很高兴听到。是的,只提交.dist。对于自动重命名,您可能必须使用脚本。看看Incenteev/ParameterHandler。那是用于 Symfony2 parameters.yml.dist 文件的包。
      【解决方案3】:

      就像@Matteo 说的,Symfony3 的目录结构已经改变了。

      我发现在我的情况下,只需要切换到Symfony3根目录并运行:

      phpunit -c phpunit.xml.dist
      

      “phpunit.xml.dist”的默认配置文件会自动在您的 Symfony3 目录结构中创建,您可以根据需要修改该配置文件。我刚刚验证了以上内容在我的系统上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-04
        • 2016-10-04
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 2012-03-10
        • 1970-01-01
        相关资源
        最近更新 更多