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

时间:2015-04-16 13:12:30

标签: php phpunit whitelist

我在一个项目上设置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
    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目录中的文件......但是查看代码覆盖率报告,似乎是白名单没有考虑到:

Code coverage

正如在捕获中看到的那样,testsvendor被写为0%覆盖,尽管它们不应被分析,因为它们不属于白名单。 src目录的“2%文件”对应于我编写的唯一测试,因此代码覆盖率似乎正确。

如何让src/service真正成为唯一需要分析以计算代码覆盖率的目录?

我使用PHP 5.4.3和PHPUnit 4.4.5。

1 个答案:

答案 0 :(得分:6)

问题解决了。我没有使用processUncoveredFilesFromWhitelist参数这一事实意味着,除非我明确地将目录放在白名单中,否则他们不会进行覆盖分析。所以在我的情况下,黑名单似乎没用,因为只考虑白名单中的项目;如果我想要排除此白名单的子目录,我可以使用该标记。