强制从PHPUnit代码覆盖范围中排除文件

时间:2013-01-17 12:52:11

标签: symfony1 phpunit symfony-1.4 code-coverage

是否可以从PHPUnit的代码覆盖中强行排除文件夹?

我遇到的问题是,我有一个Symfony 1.4项目,其中包含./lib/vendor/symfony/*个文件夹。我希望以递归方式排除./lib/vendor/*内的任何内容。

现在,我想要排除它们是否被我的测试隐含地覆盖,即我从不想看到这些文件夹。所以,我已将此位添加到我的phpunit.xml配置文件中,但无论我做什么,它似乎都不会排除这些文件夹:

<filter>
    <whitelist>
        <exclude>
            <directory>./lib/vendor/*</directory>
            <directory>./lib/vendor/symfony/lib/*</directory>
        </exclude>
    </whitelist>
</filter>

在我看来,当代码被点击并且XDebug注意到它,PHPUnit将把它包含在代码覆盖中,无论如何。我的缺点是,这个代码已经被Symfony开发人员测试过了,所以不需要将它包含在我的报告中,搞乱了我的数字:P

5 个答案:

答案 0 :(得分:24)

好的,所以我认为你可以拥有黑名单部分或白名单部分,结果你可以同时拥有这两部分,所以我将这些文件夹列入黑名单并且有效:

    <filter>
        <blacklist>
              <directory>./lib/vendor</directory>
              <directory>./lib/helper</directory>
        </blacklist>
    </filter>

答案 1 :(得分:5)

在或多或少的最新版本的PHPUnit中,从覆盖率报告中排除某些文件的正确方法是使用<exclude>指令而不是<blacklist>。例如:

<filter>
    <whitelist>
        <directory suffix=".php">src/</directory>
        <exclude>
            <directory suffix=".php">src/Legacy/</directory>
            <file>src/example.php</file>
        </exclude>
    </whitelist>
</filter>

答案 2 :(得分:3)

观察:与黑名单相比,白名单(您想要包含在代码覆盖中的目录)使整个测试套件的phpunit执行速度更快。

AnimationExperimental.startAnimation({
    node: this.refs['this'],
    duration: 500,
    easing: 'easeInOutCubic',
    property: 'scaleXY',
    toValue: [2,2]
}, () => {
        console.log("callback called!");
});

测试:PHPUnit 4.5.0和PHP 5.5.9

答案 3 :(得分:0)

这些答案似乎都适用于旧版PHPUnit

我正在运行PHPUnit 5.7.23并且在phpunit中包含和排除文件时出现问题。 syntax似乎已发生实质性变化,只是部分向后兼容。我有一个复杂的要求,我需要包括&amp;排除了代码覆盖的单独目录(它是遗留系统)。

以下是phpunit.xml中我需要的内容:

<testsuites>
    <testsuite name="Unit Tests">
        <directory suffix="Test.php">./tests</directory>

        <exclude>./tests/blah/excluded_file_from_tests1.php</exclude>
        <exclude>./tests/blah/excluded_file_from_tests2.php</exclude>
        <exclude>./tests/blah/excluded_file_from_tests3.php</exclude>
    </testsuite>
</testsuites>
<filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">./common/lib/included_directory</directory>
        <exclude>
            <directory suffix=".php">./common/lib/included_directory/core/blah/excluded_directory</directory>
        </exclude>
    </whitelist>
</filter>

所以:

  • <testsuites>下我包括./tests目录
  • 但是,在.tests下,我想排除一组文件excluded_file_from_testsX.php
  • 然后,我想将目录./common/lib/included_directory
  • 列入白名单
  • 但是,在包含目录下面的几个级别下面是我想要排除的目录(./common/lib/included_directory/core/blah/excluded_directory)。

所以当通过phpunit --coverage-html build/coverage

运行时,这似乎运作良好

答案 4 :(得分:0)

与PHPUnit 9.0.1一起使用

<filter>
    <whitelist addUncoveredFilesFromWhitelist="true">
        <directory suffix=".php">DIRECTORY_TO_ADD</directory>
        <directory suffix=".php">ANOTHER_DIR_TO_ADD</directory>
        <exclude>
            <file>ANOTHER_DIR_TO_ADD/file1_to_not_include.php</file>
            <file>ANOTHER_DIR_TO_ADD/file2_to_not_include.php</file>
        </exclude>
    </whitelist>
</filter>