關於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目錄中。

參考