Symfony3 phpunit xml

4

大家好,我已经在我的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 unit需要这个文件?我知道这个文件告诉phpunit在哪里寻找测试,但只有这些吗?

  2. 我手动创建了这个文件,是否有一种自动创建它的方式,比如使用终端命令?

  3. 据我所知,<whitelist> 是phpunit被允许“查找”的地方?而 <exlude> 则是phpunit禁止“查找”的地方?如果是这样的话,那为什么这个<directory>../src/*/*Bundle/Tests</directory>会在<exlude>中,而那里是测试的位置。

3个回答

6

随着新的Symfony3目录结构,PHPUnit配置文件位于项目根目录中,因此您不需要再指定-c参数(配置)。因此,您可以简单地按照以下方式启动:

>bin/phpunit

希望这能帮到你。

1
首先回答你的问题:
  1. 这是一个配置文件,可以让你自定义PHPUnit的行为。要了解该文件的详细说明,请查看文档
  2. Symfony的默认安装包含一个位于根目录下的phpunit.xml.dist文件(请参阅存储库)。在这种情况下,.dist表示它是Symfony建议的标准,您可以根据需要进行更改。您可能已经对parameters.yml.dist文件执行了相同的操作。只需复制并将其命名为phpunit.xml,然后调整任何参数以适应当前环境。确保不要将phpunit.xml文件检入您的版本控制系统中,以便环境特定的更改不会干扰您运行代码的其他系统。
  3. <whitelist><exclude>元素定义应该被PHPUnit考虑或忽略的文件。由于您将此块添加到<filter>元素内部,因此它定义了所有应由PHPUnit生成代码覆盖率的文件。您从其中排除测试文件,因为您希望它们运行,并且只关心您的实际代码在测试条件下的行为。
关于为什么您的测试无法运行,我不确定。尝试按照第2点所描述的方法,在您的项目目录中运行phpunit。对我来说,它完美地运行了。

非常感谢提供如此有用的信息。现在它可以工作了,但我需要将phpunit.xml.dist从./根目录移动并重命名为app目录,有什么想法吗?另外,phpunit.xml不应该提交到VCS,只有phpunit.xml.dist,当项目被克隆时,composer update将基于phpunit.xml.dist安装phpunit.xml,对吗? - John
很高兴听到这个消息。是的,只提交.dist文件。关于自动重命名,您可能需要使用脚本。请查看Incenteev/ParameterHandler。这是用于Symfony2 parameters.yml.dist文件的捆绑包。 - ferdynator

0

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

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

phpunit -c phpunit.xml.dist

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


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