測試程式覆蓋率

需要 XDebug 3.0+PCOV

測試程式覆蓋率(或程式碼覆蓋率)是一種用於衡量在測試期間執行的程式碼百分比的指標。這可以幫助開發人員找出他們程式碼中可能沒有測試過或覆蓋率低的部分,這表示有錯誤和其他問題的潛在風險。

通常,收集程式碼覆蓋率的基本設定已經存在於由架構提供的 phpunit.xml 檔案中,或透過執行 ./vendor/bin/pest --init 命令產生。如果 phpunit.xml 檔案中沒有程式碼覆蓋率設定,你可以新增自己的設定來指定專案中應該取得程式碼覆蓋率報告的路徑。

1...
2<source>
3 <include>
4 <directory suffix=".php">./app</directory>
5 </include>
6</source>
7...

除了設定 phpunit.xml 檔案之外,你還需要安裝 XDebug 3.0+PCOV 來產生程式碼覆蓋率報告。使用 XDebug 時,XDEBUG_MODE 環境變數必須設定為 coverage

一旦設定程式碼覆蓋率設定並安裝一個覆蓋率驅動程式,生成程式碼覆蓋率報告就可以輕而易舉地使用 --coverage 選項。

1./vendor/bin/pest --coverage

透過使用 --coverage 選項,測試套件會正常執行,但額外提供顯示專案檔案及其對應覆蓋率結果的清單。

如果目前的測試套件有任何未覆蓋的行,它們會以紅色標示,並使用其對應的行號顯示。多個未覆蓋的行會用兩個點 (..) 顯示在它們之間。例如,如果在 52 到 60 行之間有覆蓋率缺失,你會看到紅色的 52..60 而不是僅 52

最低門檻執行

為了確保全面的測試和維護程式碼品質,設定覆蓋率結果的最低門檻值至關重要。在 Pest 中,你可以使用 --coverage--min 選項定義覆蓋率結果的最低門檻值。如果沒有達到指定的門檻值,Pest 會報告失敗。

1./vendor/bin/pest --coverage --min=90

忽略程式碼

如果你的應用程式中有某些部分無法測試,而且應該從程式碼覆蓋率分析中排除,你可以使用原始程式碼中的 @codeCoverageIgnoreStart@codeCoverageIgnoreEnd 註解來達成。

1// @codeCoverageIgnoreStart
2function getUsers() {
3 //
4}
5// @codeCoverageIgnoreEnd

不同的格式

Pest 支援各種程式碼覆蓋率報告格式

  • --coverage-clover <檔案>:將程式碼覆蓋率報告儲存為指定的 Clover XML 格式的檔案。
  • --coverage-cobertura <檔案>:將程式碼覆蓋率報告儲存為指定的 Cobertura XML 格式的檔案。
  • --coverage-crap4j <檔案>:將程式碼覆蓋率報告儲存為指定的 Crap4J XML 格式的檔案。
  • --coverage-html <目錄>:將程式碼覆蓋率報告儲存為 HTML 格式的指定的目錄。
  • --coverage-php <檔案>:序列化程式碼覆蓋率資料並儲存至指定的檔案。
  • --coverage-text <檔案>:將程式碼覆蓋率報告儲存為文字格式至指定的檔案。(預設:php://stdout)
  • --coverage-xml <目錄>:將程式碼覆蓋率報告儲存為 XML 格式至指定的目錄。

在本章中,我們討論了測試覆蓋率及其在判斷實際測試的應用程式百分比的能力。在下一個章節中,我們將深入探討 Pest 的型別覆蓋率外掛程式:型別覆蓋率