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

Symfony1 强制从PHPUnit代码覆盖范围中排除文件,symfony1,phpunit,symfony-1.4,code-coverage,Symfony1,Phpunit,Symfony 1.4,Code Coverage,是否可以强制将文件夹从PHPUnit的代码覆盖范围中排除 我遇到的问题是,我有一个symfony1.4项目,它的文件夹位于/lib/vendor/Symfony/*。我想递归地排除/lib/vendor/*中的任何内容 现在,我想排除它们,不管它们是否被我的测试隐式覆盖,也就是说,我永远不想看到这些文件夹。因此,我在我的phpunit.xmlconfig文件中添加了这一点,但它似乎并不排除这些文件夹,无论我做什么: <filter> <whitelist>

是否可以强制将文件夹从PHPUnit的代码覆盖范围中排除

我遇到的问题是,我有一个symfony1.4项目,它的文件夹位于
/lib/vendor/Symfony/*
。我想递归地排除
/lib/vendor/*
中的任何内容

现在,我想排除它们,不管它们是否被我的测试隐式覆盖,也就是说,我永远不想看到这些文件夹。因此,我在我的
phpunit.xml
config文件中添加了这一点,但它似乎并不排除这些文件夹,无论我做什么:

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

/lib/供应商/*
./lib/vendor/symfony/lib/*

在我看来,只要代码被命中并且XDebug注意到它,PHPUnit就会将它包括在代码覆盖范围内,不管发生什么。我的缺点是,这段代码已经由Symfony开发人员测试过了,因此不需要将其包括在我的覆盖率报告中,弄乱我的数字:P

好的,所以我认为您可以有黑名单部分或白名单部分,结果证明您可以同时拥有这两个部分,因此我将这些文件夹列入黑名单,并且它起到了作用:

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

/lib/供应商
/lib/helper
观察:与黑名单相比,白名单(您希望包含在代码覆盖范围内的目录)使整个测试套件的phpunit执行更快

<filter>
    <whitelist>
          <directory>/my/project/directory/to/be/covered</directory>
          ....
    </whitelist>
</filter>

/我的/project/directory/to/be/covered
....

通过:PHPUnit 4.5.0和php5.5.9测试,这些答案似乎都适用于较旧版本的
PHPUnit

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

以下是我在
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>

/测试
./tests/blah/excluded_file_from_tests1.php
./tests/blah/excluded_file_from_tests2.php
./tests/blah/excluded_file_from_tests3.php
./common/lib/included\u目录
./common/lib/included_目录/core/blah/excluded_目录
因此:

  • 下,我包括
    /tests
    目录
  • 但是,在
    .tests
    下,我想从\u testsX.php中排除一组文件
    excluded\u file\u
  • 然后,我想将目录列入白名单
    /common/lib/included\u目录
  • 但是,在几个级别下面的included目录下有一个我也想排除的目录(./common/lib/included_directory/core/blah/excluded_directory)

因此,当通过
phpunit运行时,这似乎工作得很好——coverage html build/coverage

在phpunit的较新版本中,从coverage报告中排除某些文件的正确方法是使用
指令,而不是
。例如:


src/
src/遗产/
src/example.php
对于使用最新架构的较新PHPUnit,这将是:


src/
src/遗产/
src/example.php

适用于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>

要添加的目录
要添加的另一个目录
另一个\u DIR\u TO \u ADD/file1\u TO \u not\u include.php
另一个\u DIR\u TO \u ADD/file2\u TO \u not\u include.php

您是否尝试过将
*
从路径中删除?@j0k是的,我尝试过,尝试过所有东西,vendor,vendor/,vendor/*,vendor/*/和vendor/*/*我只是遇到了类似的问题,我解释上述结构的方式是将
排除在白名单之外。与将
排除在黑名单之外的
相反。请注意。这需要在里面…Php_代码_覆盖率库不再支持黑名单。这个答案上的后缀过滤器对我的覆盖率报告生成的性能产生了巨大的影响;非常感谢。