PHPUnit - 如何忽略类加载器的代码覆盖?

时间:2013-05-01 19:31:08

标签: phpunit code-coverage

当我为我的PHP项目生成代码覆盖时,我总是得到Symfony自动加载器。

我尝试将此添加到我的PHPUnit配置中,但没有运气:

<filter>
    <blacklist>
        <directory>/Symfony/Component</directory>
    </blacklist>
</filter>

2 个答案:

答案 0 :(得分:1)

首先,您没有指定后缀属性来搜索黑名单中的特定文件类型

所以它应该是

<filter>
    <blacklist>
        <directory suffix=".php">/Symfony/Component</directory>
    </blacklist>
</filter>

如果这对您不起作用,那么您可以在白名单块中使用排除标记

<filter>
    <whitelist>
        <directory suffix=".php">../src/library/</directory>
        <!-- add more directories -->
        <exclude>
            <directory suffix=".php">./Zend/</directory>
            <!-- add more directories with relative or absolute path -->
        </exclude>
    </whitelist>
</filter>

参考:How can PHPUnit code coverage ignore my autoloader?

答案 1 :(得分:0)

我正在使用作曲家并尝试了几种变体,包括白名单中的排除:

我的目录结构是:

...
/project/tests
/project/vendor
/project/vendor/composer
...

我试图让白名单工作:

<whitelist>
    <exclude>
        <directory suffix=".php">..\vendor\composer\</directory>
        <directory suffix=".php">../vendor/composer/</directory>
        <directory suffix=".php">..\composer\</directory>
        <directory suffix=".php">../composer/</directory>
    </exclude>
</whitelist>

那不起作用。但这样做了:

<filter>
    <blacklist>
        <directory suffix=".php">../vendor/composer</directory>
    </blacklist>
</filter>

我的配置xml文件在tests文件夹中,以及在composer的自动加载器中加载的引导程序文件。

<?php

require_once(__DIR__. str_repeat(DIRECTORY_SEPARATOR. '..', 1) . DIRECTORY_SEPARATOR . 'vendor'. DIRECTORY_SEPARATOR . 'autoload.php');