2023-12-18|閱讀時間 ‧ 約 28 分鐘

PHPUnit 自動化測試大作戰【CH22】

今天讓我們來看 phpunit.xml 吧!

phpunit.xml 位在 Laravel 專案根目錄底下,顧名思義,它是一個設定 PHPUnit 執行方式的設定XML檔,PHPUnit 提供了不少設定值可供設定,這邊只提最重要的幾個:

stopOnFailure

  • 說明:當此欄位設定為 true 時,將會在遇到第1個測試案例測試失敗時,停止後續測試程式碼的執行。
  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" stopOnFailure="true">

<!-- 下略 -->

</phpunit>

stopOnError

  • 說明:當此欄位設定為 true 時,將會在遇到第1個測試案例測試錯誤時,停止後續測試程式碼的執行。特別注意的是,Error 與前 Failure 不同,Error 程式碼語法有錯誤,Failure 是未通過測試驗證。
  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" stopOnError="true">

<!-- 下略 -->

</phpunit>

bootstrap

  • 說明:當此欄位有設定時,PHPUnit 將會執行該欄位所指定路徑之 PHP 程式碼,建議保留預設值即可。
  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php">

<!-- 下略 -->

</phpunit>

colors

  • 說明:當此欄位設定為 true 時,執行PHPUnit時將於終端機上輸出含色彩之文字,建議保留預設值即可。
  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd" colors="true">

<!-- 下略 -->

</phpunit>

<testsuites>

— <testsuite>

— — <directory>

  • 說明:這個標籤可以設定要執行哪些指定資料夾下的測試程式碼。
  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit>

<testsuites>

<testsuite name="Unit">

<directory suffix="Test.php">./tests/Unit</directory>

</testsuite>

<testsuite name="Feature">

<directory suffix="Test.php">./tests/Feature</directory>

</testsuite>

</testsuites>

<!-- 下略 -->

</phpunit>

<coverage>

— <include>

  • 說明:這個標籤可以設定,執行覆蓋率計算時,指定涵蓋的資料夾。
  • 範例:
<coverage processUncoveredFiles="true">

<include>

<directory suffix=".php">./app</directory>

</include>

</coverage>

— <exclude>

  • 說明:這個標籤可以設定,執行覆蓋率計算時,指定排除的資料夾。
  • 範例:
<coverage processUncoveredFiles="true">

<exclude>

<directory suffix=".php">./app/services</directory>

</exclude>

</coverage>

<php>

— <env>

  • 說明:這個標籤可以設定執行測試時的 env 值,當這邊沒設定時,會使用 .env 的設定值,通常會設定以下幾個 env 值:

APP_ENV

DB_CONNECTION

DB_DATABASE

CACHE_DRIVER

QUEUE_CONNECTION

SESSION_DRIVER

  • 範例:
<?xml version="1.0" encoding="UTF-8"?>

<phpunit>

<!-- 上略 -->

<php>

<env name="APP_ENV" value="testing"/>

<env name="BCRYPT_ROUNDS" value="4"/>

<env name="CACHE_DRIVER" value="array"/>

<env name="DB_CONNECTION" value="sqlite"/>

<env name="DB_DATABASE" value=":memory:"/>

<env name="MAIL_MAILER" value="array"/>

<env name="QUEUE_CONNECTION" value="sync"/>

<env name="SESSION_DRIVER" value="array"/>

<env name="TELESCOPE_ENABLED" value="false"/>

</php>

</phpunit>

以上就是今天的介紹囉!

下一篇我們來看看測試覆蓋率吧。

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

參考資料

本系列文章目錄

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.