🌚

PHPUnit代码覆盖率的统计方法

Posted at — Apr 30, 2017
#编程 #单元测试 #php #phpunit

关于PHPUnit代码覆盖率的很多概念,官方文档中讲的十分清楚,本文仅就部分语焉不详的细节做些补充。

虽然phpunit.xml不是必需,但每次都输入完整的命令很不方便,所以一般都要生成这个配置文件。用phpunit --generate-configuration生成的phpunit.xml默认包含forceCoversAnnotation="true",它表示必须在测试方法头部的注释里显式使用@covers标签声明统计范围,例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/**
 * @covers Ox3f\LaravelUtils\Log\Log::<public>
 * @covers Ox3f\LaravelUtils\Log\Log::parseCallStack
 * @covers Ox3f\LaravelUtils\Log\Log::__construct
 * @covers Ox3f\LaravelUtils\Log\Log::__callStatic
 */
public function testAll()
{
    // ...
}

否则在执行统计代码覆盖率的命令时,会报risk:

There was 1 risky test:

  1. Ox3f\LaravelUtils\Log\LogTest::testAll This test does not have a @covers annotation but is expected to have one

如果希望单元测试覆盖全部代码、且不用一一显式声明,可以将此选项的值改成 false

之后即可使用明令phpunit —coverage-html ./report统计代码覆盖率,统计结果保存在report目录中。

参考