我正在使用Phpunit.如果我只是运行我的测试:
phpunit --log-junit output.xml
这在一秒钟内运行.但如果我想要代码覆盖:
phpunit --coverage-html ./report --log-junit output.xml
然后非常慢,phpunit发送"从* .xml 读取配置"并挂起一分钟,然后开始执行测试
默认情况下,即使您为单个测试运行PHPUnit,PHPUnit也会评估配置的白名单中所有文件的覆盖范围。
如果您的白名单中有很多文件,这可能会增加很多时间来生成代码覆盖率。
您可以通过配置PHPUnit来生成代码覆盖率只为你写的文件/文件为执行测试,通过将加快速度addUncoveredFilesFromWhitelist
属性false
。
<phpunit>
<!-- ... -->
<filter>
<whitelist addUncoveredFilesFromWhitelist="false">
<!-- ... -->
</whitelist>
</filter>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
在禁用此设置的情况下,您应该看到生成的代码覆盖率文件仅描述了运行测试的文件。
请注意,PHPUnit文档建议默认addUncoveredFilesFromWhitelist
为false
默认设置,但在5.5版上则true
默认为。
只是为了增加最后的答案.通常,它发生是因为PHPunit看到所有文件,你需要告诉他们不要这样做,如下面的示例:
看看我的过滤器节点到这样的phpunit.xml
<filter>
<whitelist>
<directory>../src</directory>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
我需要添加等于false的addUncoveredFilesFromWhitelist并添加我需要排除的所有文件,如下所示:
<filter>
<whitelist addUncoveredFilesFromWhitelist="false">
<directory suffix=".php">../src</directory>
<exclude>
<directory>../vendor</directory>
<directory>../anotherpath</directory>
<directory>../src/Modules/*/Fixture</directory>
<file>../src/Modules/*/Bootstrap.php</file>
</exclude>
</whitelist>
</filter>
Run Code Online (Sandbox Code Playgroud)
注意我的排除列表,其中我排除了所有模块的"Fixture"目录和Bootstrap.php文件
完成这个简单的更改后,我的单元测试从10分钟变为3分钟,所以尽情享受:)
这是正常行为。
想想 PHPUnit 在做什么:
它运行您的测试,跟踪每行代码的每次执行,然后获取所有原始数据(每行执行的次数),并通过读取代码并将其重新格式化为 HTML 来构建报告,并补充所有执行数据。
需要很长时间并不奇怪。
归档时间: |
|
查看次数: |
5891 次 |
最近记录: |