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

时间:2019-08-09 18:20:56

标签: php unit-testing phpunit phpunit-testing

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

1 个答案:

答案 0 :(得分:2)

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

示例:您运行了完整的测试套件,报告说您覆盖了72%的代码。然后添加更多测试。您只运行这些新测试,最后得出的代码覆盖率为3%。之后,您可以合并两个报告,以使覆盖率达到75%。

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

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

phpunit --coverage-php coverage/fulltest.cov

过一阵子,您编写了一个新测试并仅运行该测试

phpunit tests/SomeClassTest --filter testNewMethod --coverage-php coverage/testNewMethod.cov

您将报告合并到coverage.html文件中,以获得完整的代码覆盖范围

phpcov merge --html coverage.html /coverage

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