PHPUnit的白名单和黑名单似乎被忽略了。

7

我正在为一个按照以下结构组织的项目设置PHPUnit:

- build
- src
    - service # PHP source code files here
- tests
    - php
        - unit # PHP unit tests here
            - bootstrap.php # PHP unit tests here
            - services
                - MyTest.php
                - ...
- vendor

我创建了以下PHPUnit配置文件,位于项目根目录:

我创建了以下PHPUnit配置文件,位于项目根目录:

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.4/phpunit.xsd"
    bootstrap="tests/php/unit/bootstrap.php"
    verbose="true">

    <testsuites>
        <testsuite name="services">
            <directory>tests/php/unit/services</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>src/service</directory>
        </whitelist>
    </filter>

    <logging>
        <log type="coverage-html" target="build/php/coverage"/>
        <log type="coverage-clover" target="build/php/coverage.xml"/>
        <log type="junit" target="build/php/test-results.xml"/>
    </logging>
</phpunit>

我希望使用白名单,以便PHPUnit不测试项目外的PHP文件,例如vendor目录中的文件...但查看代码覆盖报告,似乎白名单没有被考虑:

代码覆盖率

如上图所示,尽管它们不属于白名单,但testsvendor都写成了0%覆盖率。而src目录下的'2% 文件'对应于我编写的唯一测试,因此该测试的代码覆盖率似乎是正确的。

我应该如何使src/service成为唯一分析以计算代码覆盖率的目录?

我使用PHP 5.4.3和PHPUnit 4.4.5。


如果在“vendor”文件夹中的文件被报告为“0%”,那么它们将被忽略。IDE是否会报告其中任何一个具有超过“0%”的代码覆盖率?我猜不会。 - axiac
1个回答

6
问题已解决。我没有使用processUncoveredFilesFromWhitelist参数的事实意味着,除非我明确将目录放入白名单中,否则它们不会被覆盖分析。因此,在我的情况下,黑名单似乎是无用的,因为只有白名单中的项目才会被考虑; 如果我想要排除这个白名单的子目录,我可以使用标签。

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