仅运行 phpunit 代码覆盖率而不运行所有测试?

IMB*_*IMB 2 php phpunit unit-testing

运行测试需要时间,有时我只是想知道覆盖范围。是否可以运行类似的东西,phpunit --coverage-text使其仅输出测试覆盖率而不实际运行所有测试?

Cac*_*nde 5

您不能这样做,因为 PHPUnit 需要运行测试才能知道测试涉及了哪些代码行。但有一个解决方法:合并代码覆盖率报告。

示例:您运行完整的测试套件,报告显示您已覆盖 7​​2% 的代码。然后您再添加一些测试。您仅运行这些新测试,最终得到的代码覆盖率为 3%。之后,您可以合并两个报告以获得 75% 的覆盖率。

一种方法是使用 PHPUnit 参数--coverage-phpphpcov

您运行完整的测试套件一次:

phpunit --coverage-php coverage/fulltest.cov
Run Code Online (Sandbox Code Playgroud)

一段时间后,您编写一个新测试并仅运行该测试

phpunit tests/SomeClassTest --filter testNewMethod --coverage-php coverage/testNewMethod.cov
Run Code Online (Sandbox Code Playgroud)

您将报告合并到一个coverage.html文件中以获得完整的代码覆盖率

phpcov merge --html coverage.html /coverage
Run Code Online (Sandbox Code Playgroud)

如果您的测试确实需要很长时间才能运行,这可能是一个选择,因为现在您只需要运行新测试来更新代码覆盖率。当然,每次手动执行此过程很痛苦,但您可以创建一个脚本来自动化它。